假设有一个人:
const Person = function(fname, lname) {
this.fname = fname;
this.lname = lname;
};
我想用“名字”getter扩展其功能
Object.defineProperty(Person.prototype, 'name', {
get: () => `${this.fname} ${this.lname}`
});
然而,这不起作用。 getter中的this
不是调用它的实例原型:
const p = new Person('Taylor', 'Swift');
p.name // "undefined undefined"
相反,它是属性定义的范围:
fname = 'Someone';
lname = 'Else';
p.name // "Someone Else"
答案 0 :(得分:1)
在撰写这个问题的过程中,答案显而易见。如果它可以帮助其他人,仍然发布。
Getter属性确实绑定到它们的宿主对象。
问题在于我正在使用箭头函数来获取getter。箭头函数没有自己的this
,而是使用封闭执行上下文的this
值。
这意味着为getter属性执行的bind
无效。
例如:
const foo = () => this.document;
foo() // global document object
foo.call({document: 'na'}) // still global document object
const bar = foo.bind({document: 'na'});
bar(); // still global document object