javascript - 为什么在构造函数中的方法之前需要“this”?
问题描述
在下面的代码中,我认为原型链的工作方式(基本上)是,如果子对象(在本例中为 mike)本身没有方法,它会通过 __ proto__ 查找原型链,以查看如果一个父对象在它的原型对象中有它,如果有,那么'mike'应该可以访问它。正确的?
如果那是对的,那么,为什么迈克无法使用“告别”?显然,我可以看到它是“这个”。(或缺少)这有所不同,但如果 __ proto__ 允许子对象访问父对象原型对象中的方法,我们为什么需要为此烦恼。一点都没有??
非常感谢!
function PersonConstructor() {
this.greet = function sayHello() {
console.log("hello");
};
farewell = function sayBye() {
console.log("Bye");
};
}
function personFromConstructor(name, age) {
const person = new PersonConstructor();
person.name = name;
person.age = age;
return person;
}
const mike = personFromConstructor("Mike", 30);
console.log(mike.greet); // [Function: sayHello]
console.log(mike.farewell); // undefined
解决方案
这与原型根本没有太大关系。当你这样做时会发生什么new PersonConstructor()
,简化:
let obj = {};
/* [ here be dragons and details about setting up prototype chains ] */
PersonConstructor.call(obj); // `this` inside PersonConstructor is obj
return obj;
本质上,它相当于:
let obj = {};
obj.greet = function sayHello() {
console.log("hello");
};
farewell = function sayBye() {
console.log("Bye");
};
这应该说明为什么farewell
不会以任何方式最终成为对象的一部分。
推荐阅读
- r - flexdashboard 故事板布局中的选项卡集面板
- swift - 在返回按钮上推送不带标题的导航控制器
- excel - Excel VBA - 每次循环时索引/匹配更改数组/范围
- django - Django夹具创建,忽略对象之间的关系
- r - 根据另一列减去两个数据框中的列
- css - 无法使用 css-blocks 和 webpack 读取未定义的属性“上下文”
- c++ - 对为什么我的代码不会输出文本感到困惑?
- ios - 如何更改用于共享邮件应用程序作曲家的导航栏按钮的色调颜色
- jquery - 导致pickadate的Aurelia项目不是功能
- python - Python Pandas - 将数值均匀分布到最近的行