我正在学习js,对一件事感到困惑。我只是从 mdn 复制/粘贴代码示例...
function Person(gender) {
this.gender = gender;
}
Person.prototype.sayGender = function() {
alert(this.gender);
};
var person1 = new Person('Male');
var genderTeller = person1.sayGender;
person1.sayGender(); // alerts 'Male'
genderTeller(); // alerts undefined
alert(genderTeller === person1.sayGender); // alerts true
alert(genderTeller === Person.prototype.sayGender); // alerts true
在上面的示例中,genderTeller
将返回 undefined
,但在第二个示例中稍作修改后:
function Person(gender) {
this.gender = gender;
}
Person.prototype.sayGender = function() {
alert(this.gender);
};
var person1 = new Person('Male');
var genderTeller = person1.sayGender();
genderTeller();
genderTeller 函数实际上可以工作,但也会返回“typeError:genderTeller 不是一个函数”。
为什么在第二个示例中,genderTeller 明确分配给了一个方法,但它不是一个函数?
最佳答案
在第一个示例中,您将一个函数分配给一个变量并执行它。在这种情况下,this
是窗口,因为您只是调用该函数,而不是在任何东西上调用它。
在第二种情况下,您调用该函数并将其结果分配给genderTeller
。由于该函数不返回任何内容,因此该变量未定义。
关于javascript - 为什么这个函数可以工作但仍然返回 typeError ... is not a function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20816366/