将名为"sample"的属性设置为1:
方式1:
function Collection() {
this.sample = function() {
return 1;
}
}
方式2:
function Collection() {
this.sample = function() {
this.sample = 1;
}
}
会有什么不同吗?
在第二种情况下,只能调用obj.sample()
一次;之后你会试着拨打1号电话。
var obj = new Collection();
var one = obj.sample();
var again = obj.sample();
在第一种情况下,one
和again
最终都为1;在第二种情况下,第三行出现异常("Uncaught TypeError:number is not a function")。
巨大的区别:第一个赋值最终会将this.sample设置为返回1的函数,第二个赋值最终将this.ample设置为设置this.sample=1的函数(失去对构造函数中构建的匿名函数的引用),并返回undefined。
因此,对于"方式1":
var c = new Collection();
console.log(c.sample()); // logs "1"
console.log(c.sample()); // logs "1" again
和"方式2":
var c = new Collection();
console.log(c.sample()); // logs nothing (undefined doesn't print anything, iirc)
console.log(c.sample()); // throws an error, since "1" is not a function
您正在做不同的事情:
在第一个示例中,您有一个FUNCTION,它返回数字"1"。
在第二个示例中,您将对象的MEMBER"sample"设置为"1"。
此外,当您第一次调用object.sample(示例#2)时,您将收到nil而不是"1",因为您正在调用设置成员的函数。
第一次通话后,无论何时访问"sample",您都会收到号码"1"。