【发布时间】:2015-10-23 15:57:36
【问题描述】:
当 ES6 箭头函数似乎不适用于使用prototype.object 将函数分配给对象时。考虑以下示例:
function Animal(name, type){
this.name = name;
this.type = type;
this.toString = () => `${this.name} is a ${this.type}`;
}
var myDog = new Animal('Max', 'Dog');
console.log(myDog.toString()); //Max is a Dog
在对象定义中显式使用箭头函数有效,但使用 Object.prototype 语法的箭头函数无效:
function Animal2(name, type){
this.name = name;
this.type = type;
}
Animal2.prototype.toString = () => `${this.name} is a ${this.type}`;
var myPet2 = new Animal2('Noah', 'cat');
console.log(myPet2.toString()); //is a undefined
作为概念证明,使用带有 Object.prototype 语法的模板字符串语法确实有效:
function Animal3(name, type){
this.name = name;
this.type = type;
}
Animal3.prototype.toString = function(){ return `${this.name} is a ${this.type}`;}
var myPet3 = new Animal3('Joey', 'Kangaroo');
console.log(myPet3.toString()); //Joey is a Kangaroo
我是否遗漏了一些明显的东西?我觉得示例 2 应该在逻辑上工作,但我对输出感到困惑。我猜这是一个范围界定问题,但我被输出“is a undefined”吓跑了。
【问题讨论】:
-
@Bergi 我的问题是 10 个月前发布的,有 0 人支持。它怎么可能与 5 个月前发布的问题重复,为什么现在决定这一点很重要?
-
这里没有责备(注意我也没有关闭问题,只是发表了评论)。唯一重要的是,未来的读者会被定向到关于这个主题的非常有用的规范帖子,这就是我链接它的原因。
标签: javascript prototype ecmascript-6 arrow-functions