如何引用第一个被调用的对象?

时间:2010-11-28 08:29:14

标签: javascript node.js

我有这段代码:

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”。

是否可以参考乔希的名字?

2 个答案:

答案 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");