将名为 'sample' 的属性设置为 1 :
方式一:
function Collection() {
this.sample = function() {
return 1;
}
}
方式二:
function Collection() {
this.sample = function() {
this.sample = 1;
}
}
会有什么不同吗?
将名为 'sample' 的属性设置为 1 :
方式一:
function Collection() {
this.sample = function() {
return 1;
}
}
方式二:
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.sample 设置为设置 this.sample = 1 的函数(失去对匿名的引用构造函数中内置的函数),并返回未定义。
因此,对于“方式 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
你正在做不同的事情:
在第一个示例中,您有一个返回数字“1”的函数。
在第二个示例中,您将对象的 MEMBER 'sample' 设置为 '1'。
此外,当您第一次调用 object.sample(示例 #2)时,您将收到 nil 而不是 '1',因为您正在调用设置成员的函数。
第一次通话后,每当您访问“样本”时,您都会收到数字“1”。