【发布时间】:2016-10-19 21:43:06
【问题描述】:
define property in constructor 这里提出了完全相同的问题,但我觉得答案并不令人满意。 代码抄自《The Principles of Object Oriented JavaScript》一书,稍作修改让问题更清晰。
function Person(xname) {
Object.defineProperty(this, "name", {
get: function() {
return xname;
},
set: function(newName) {
name = newName;
},
configurable: true,
enumerable: true
});
this.sayName = function() {
console.log(this.name);
};
}
var One = new Person("Mark");
One.sayName();
console.log(One.name);
//output:
//Mark
//Mark
我将参数name修改为xname,因为使用同名的局部变量和对象属性更加混乱。
我怀疑这段代码是否按预期工作,但它甚至让我感到困惑。
我知道它在构造函数中使用 Object.defineProperty 在新创建的实例上创建一个名为“name”的属性。
getter 方法返回 xname,但 xname 在行后超出范围: var One = new Person("Mark");稍后如何在代码对象的 One getter 中设法返回 xname 的值??
它是的值xname,因为如果我改变getter方法返回name,就像它应该工作一样,引擎报告错误 name is not defined。 (get: function() {return name;})
更不用说 setter 方法根本不起作用。如果我编码 One.name = "Mickey",One.name 仍然设置为 "Mark"。
没有将 xname 分配给 .name 或者有但我没有看到?!
【问题讨论】:
-
“我已经将参数名修改为xname,因为使用同名的局部变量和对象属性更加混乱。”只有。你错过了二传手。
-
* 有 => 一半 (对不起)
标签: javascript