我正在学习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不是第二个例子中的函数?
答案 0 :(得分:3)
在第一个示例中,您将函数分配给变量并执行它。在这种情况下this
是窗口,因为你只是在调用函数而不是在上调用。
在第二种情况下,您正在调用该函数并将其结果分配给genderTeller
。由于该函数不返回任何内容,因此该变量未定义。
答案 1 :(得分:0)
看看这一行:
var genderTeller = person1.sayGender();
您正在分配通过调用函数返回的值,因为您正在执行该函数,而不是函数本身。
由于函数实际上没有返回值,因此它不是函数(或者根本不是函数),这就是你得到错误的原因。