1

将名为 'sample' 的属性设置为 1 :

方式一:

function Collection() {
    this.sample = function() {
        return 1;
    }
}

方式二:

function Collection() {
    this.sample = function() {
        this.sample = 1;
    }
}

会有什么不同吗?

4

3 回答 3

2

第二种情况,只能调用obj.sample()一次;之后,您将尝试拨打号码 1。

var obj = new Collection();
var one = obj.sample();
var again = obj.sample();

在第一种情况下,两者都oneagain1;在第二种情况下,第三行出现异常(“Uncaught TypeError: number is not a function”)。

于 2013-06-25T20:44:12.480 回答
1

巨大的不同:您的第一个作业最终会将 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
于 2013-06-25T20:47:28.987 回答
0

你正在做不同的事情:

在第一个示例中,您有一个返回数字“1”的函数。

在第二个示例中,您将对象的 MEMBER 'sample' 设置为 '1'。

此外,当您第一次调用 object.sample(示例 #2)时,您将收到 nil 而不是 '1',因为您正在调用设置成员的函数。

第一次通话后,每当您访问“样本”时,您都会收到数字“1”。

于 2013-06-25T20:47:01.023 回答