【发布时间】:2016-06-01 06:52:49
【问题描述】:
const proto = {
hello () {
return `Hello, my name is ${ this.name }`;
}
};
const greeter = (name) => Object.assign(Object.create(proto), { name });
const george = greeter('george');
const msg = george.hello();
console.log(msg);
当我遇到上述类型的继承时,我正在阅读JavaScript Scene。我是 JS 新手。
所以,proto 是我们将创建原型的对象。
问题 1:如果proto 是一个对象,它如何在自身内部拥有一个函数而不将其与键关联?不应该是{ "hello" : function(){...} }
与此相关,
问题 2:胖箭头函数可以作为键值对存储在对象中吗?
问题 3.Object.assign 是如何工作的?
阅读 MDN 后,我了解到从第二个参数开始的所有内容都被复制到 target 中,在我们的例子中是一个原型。对吗?
【问题讨论】:
-
对于第 1 点和第 2 点.=>这段代码 sn-p 属于 ES2016,而这个版本的 JS,它是有效的 JavaScript。
-
@AshishKumar 我知道这是有效的 JS。我只是想弄清楚它是如何工作的。
-
你错过了 ES2016... :)
-
Object.assign是用其他对象扩展一个对象。它将其他对象的属性复制到当前对象。 -
#3:
Object.create(proto)创建一个对象,其 [[Prototype]] 隐藏链接指向 proto,因此proto未被修改,而是将name添加到此新对象中
标签: javascript inheritance ecmascript-6