为什么将变量(在对象范围之外)设置为等于对象方法会返回未定义的结果?

d

下面的代码是使用JavaScriptOOPMDN页面复制并粘贴的我研究了有关使用JavaScript进行OOP的一般问题。但是,我是一个初学者,对此代码段有以下疑问:

  1. 该行的目的是Person.prototype.gender = '';什么?如果将其取出并运行代码,则会得到相同的结果。

  2. 为什么呼叫genderTeller()会导致“未定义”警报?从初学者的角度看,MDN的解释似乎有些稀疏。这是范围问题吗?

function Person(gender) {
    this.gender = gender;
}

Person.prototype.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
乔纳森·洛诺夫斯基(Jonathan Lonowski)

该行的目的是Person.prototype.gender = '';什么?如果将其取出并运行代码,则会得到相同的结果。

这似乎为该gender属性建立了默认值有了它,即使在没有调用构造函数的情况下创建实例,该属性仍会设置:

var person2 = Object.create(Person.prototype);
console.log(person2.gender); // ""

在创建子类型时,这可能会很有用:

function Employee() {}
Employee.prototype = Object.create(Person.prototype);

console.log(new Employee().gender); // ""

为什么呼叫genderTeller()会导致“未定义”警报?

MDN的文档this应对此进行进一步说明,尤其是有关“函数上下文的部分但是,a的值this取决于何时function调用a而不是由定义它的时间或位置来确定。

通过分配person1.sayGendergenderTeller,它便与解除关联person1因此,它不再是特定对象的“方法”。

相反,它被称为常规函数,其值this默认为window浏览器中的全局对象

window.gender = 'n/a';

var genderTeller = person1.sayGender;
genderTeller(); // logs: 'n/a'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么将变量(在对象范围之外)设置为等于对象方法会返回未定义的结果?

来自分类Dev

如果在对象数组中将对象设置为未定义,则返回 true

来自分类Dev

为什么在对象常量中未定义此变量?

来自分类Dev

在 `.then` 方法之外未定义范围变量

来自分类Dev

为什么原型中定义的方法会显示在对象本身中?

来自分类Dev

为什么存储在对象中的函数在运行结束时在控制台中返回未定义?

来自分类Dev

为什么 Firebase 时间戳对象返回未定义?

来自分类Dev

为什么订阅后我的对象的变量未定义

来自分类Dev

将变量或属性值传递给 JavaScript 对象中的方法返回“未定义”

来自分类Dev

打字稿在对象上返回未定义

来自分类Dev

在Javascript中,为什么未定义对象的子键返回错误而不是未定义?

来自分类Dev

为什么枢纽对象未定义

来自分类Dev

为什么对象出现未定义?

来自分类Dev

返回的Javascript对象方法未定义

来自分类Dev

为什么我的变量在我的函数之外未定义?

来自分类Dev

为什么在循环中将对象键设置为其值会使值未定义?

来自分类Dev

未定义对象的typeof不等于未定义变量的类型

来自分类Dev

使用不存在的变量作为全局对象的属性将引发未定义。为什么?

来自分类Dev

Vuex存储对象子级返回未定义,父级正确返回。为什么?

来自分类Dev

返回的对象未定义

来自分类Dev

对象返回未定义

来自分类Dev

从对象返回的未定义

来自分类Dev

对象变量未定义

来自分类Dev

在这种情况下,为什么push方法会在对象上起作用?

来自分类Dev

访问对象数组,结果为“未定义”

来自分类Dev

为什么在使用 Google Maps API 时全局设置的 JS 变量显示为未定义?

来自分类Dev

为什么在__init__之外定义对象变量不赞成?

来自分类Dev

为什么在响应生产构建中lodash获取未定义嵌套对象的返回值?

来自分类Dev

为什么我的API调用函数返回未定义的对象?

Related 相关文章

  1. 1

    为什么将变量(在对象范围之外)设置为等于对象方法会返回未定义的结果?

  2. 2

    如果在对象数组中将对象设置为未定义,则返回 true

  3. 3

    为什么在对象常量中未定义此变量?

  4. 4

    在 `.then` 方法之外未定义范围变量

  5. 5

    为什么原型中定义的方法会显示在对象本身中?

  6. 6

    为什么存储在对象中的函数在运行结束时在控制台中返回未定义?

  7. 7

    为什么 Firebase 时间戳对象返回未定义?

  8. 8

    为什么订阅后我的对象的变量未定义

  9. 9

    将变量或属性值传递给 JavaScript 对象中的方法返回“未定义”

  10. 10

    打字稿在对象上返回未定义

  11. 11

    在Javascript中,为什么未定义对象的子键返回错误而不是未定义?

  12. 12

    为什么枢纽对象未定义

  13. 13

    为什么对象出现未定义?

  14. 14

    返回的Javascript对象方法未定义

  15. 15

    为什么我的变量在我的函数之外未定义?

  16. 16

    为什么在循环中将对象键设置为其值会使值未定义?

  17. 17

    未定义对象的typeof不等于未定义变量的类型

  18. 18

    使用不存在的变量作为全局对象的属性将引发未定义。为什么?

  19. 19

    Vuex存储对象子级返回未定义,父级正确返回。为什么?

  20. 20

    返回的对象未定义

  21. 21

    对象返回未定义

  22. 22

    从对象返回的未定义

  23. 23

    对象变量未定义

  24. 24

    在这种情况下,为什么push方法会在对象上起作用?

  25. 25

    访问对象数组,结果为“未定义”

  26. 26

    为什么在使用 Google Maps API 时全局设置的 JS 变量显示为未定义?

  27. 27

    为什么在__init__之外定义对象变量不赞成?

  28. 28

    为什么在响应生产构建中lodash获取未定义嵌套对象的返回值?

  29. 29

    为什么我的API调用函数返回未定义的对象?

热门标签

归档