Javascript原型方法“无法设置属性”

时间:2017-01-23 00:17:33

标签: javascript prototype

我总是得到无法设置属性'saySomething'未定义,但为什么? 我在某个地方犯了错误吗?

TEMPLATES = [
    {
        'BACKEND': ...
        'DIRS': [
              os.path.join(os.path.dirname(file),'templates').replace('\','/'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {...},
    },
]

4 个答案:

答案 0 :(得分:6)

调试提示:当您尝试访问某些未定义的属性时,会出现此..of undefined错误。

执行new Object()时,会创建一个没有原型属性的新空对象。

我不确定我们到底想要实现什么,但您可以访问函数原型并使用它。

var Person = function() {};

Person.prototype.saySomething = function() {
  console.log("hello");
};

var aperson = new Person();
aperson.saySomething();

答案 1 :(得分:4)

prototype属性存在于函数上,而不存在于实例化对象上。



var Person = new Object();
console.log(Person.prototype); // undefined

var Person2 = function () {}
console.log(Person2.prototype); // {}




这很有用,因为放在函数原型上的东西将由使用该函数创建的所有对象实例共享(使用new)。



var Person = function() {};

Person.prototype.saySomething = function() {
  console.log("hello");
};

console.log(
  new Person().saySomething === Person.prototype.saySomething // true. they are the same function
);




如果你想要的只是向person对象添加一个方法,那就不需要原型了:



var Person = {};

Person.saySomething = function() {
  console.log("hello");
};

Person.saySomething();




您甚至可以使用对象文字语法:



var Person = {
  saySomething: function() {
    console.log("hello"); 
  }
};

Person.saySomething();




答案 2 :(得分:1)

我正在尝试一些代码,考虑将其发布,可能会对其他人有所帮助。

<script>

        var MODULE = {};
        MODULE = (function (my) {
            my.anotherMethod = function () {
                console.log("hello ");
            };

            my.newMethod = function(){
                console.log("hi new method ");

            }
            return my;
        }(MODULE));


        MODULE.anotherMethod(); 
        MODULE.newMethod(); 


    </script>

请不要使用var MODULE = {},如果未使用{}进行初始化,则它不能设置属性。

答案 3 :(得分:-1)

您可以查看here

var Person = function(name) {
  this.canTalk = true;
  this.name = name;
};
Person.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name);
  }
};

bob = new Person('bob');
bob.greet();