我有这段代码:
var Person = {
"name": "",
"changes": {
"name to": function(value) {
this["name"] = value;
}
}
}
var Josh = Object.create(Person);
Josh["changes"]["name to"]("John");
console.log(Josh.name); // nothing
console.log(Josh.changes.name); // "John"
问题是上面的内容是指对象“更改”而不是对象实例“Josh”。
我不能用Person替换它,因为它指的是对象“Person”而不是对象实例“Josh”。
是否可以参考乔希的名字?
答案 0 :(得分:2)
为什么不使用更常见的Javascript OOP形式?
function Person() {
this.name = "";
this.changes = {};
var _this = this;
this.changes.nameTo = function(name) {
_this.name = name;
}
}
var Josh = new Person();
Josh.changes.nameTo("John");
console.log(Josh.name); // "John"
console.log(Josh.changes.name); // undefined
答案 1 :(得分:0)
可悲的是没有。您没有任何对当前对象的封闭实例的引用。您需要将方法移动到外部Person
对象。
var Person = {
"name": "",
"changeNameTo": function(value) {
this["name"] = value;
}
}
编辑:如果您绝对想要原始结构,尽管从OO的角度来看很奇怪。您需要为内部对象提供对外部的引用。以编程方式,您可以按照以下方式执行此操作 - 或者可以在构造函数中执行此操作,具体取决于提供Object.create()
方法的框架。
var Person = {
"name": "",
"changes": {
"name to": function(value) {
this.data["name"] = value;
}
}
}
var Josh = Object.create(Person);
Josh.changes.data = Josh;
Josh["changes"]["name to"]("John");