如何从其功能访问父对象?

时间:2018-04-29 04:13:24

标签: javascript object ecmascript-6

所以我正在尝试一些看起来很棘手但又无法理解的事情。

我有一个像这样的对象:

var dummyObject = {
    src: 'Source code',
    fileExt: 'ejs',
}

然后另一个函数使用render()函数创建该对象的副本,所以基本上它将是:

{
    src: 'Source code',
    fileExt: 'ejs',
    render: function() {
        ...
    }
}

假设我将此dummyObject的副本定义为名为copyObject的副本。有没有办法调用copyObject.render()并让它访问所有copyObject属性而不将其作为参数传递?

重要的是要注意,我不会在对象声明中定义函数,而是定义然后以编程方式分配它,如:

var copyObject = _clone(dummyObject)
copyObject.render = function() {...}

谢谢!

编辑:以防万一我的问题被误解(我迟到时输入它并且我累了)。在这种情况下应该忽略dummyObject,因为copyObject是一个全新的副本,没有任何引用。所以基本上我将方法添加到copyObject,我需要它来访问自己。像这样:

function selectProcessor (obj) {
    var newObj = _clone(newObj)
    newObj.render = function () {
        console.log(this.src) // It doesn't make sense accessing this from here
    }
    return newObj
}

// At some point I execute this function
var copyObject = selectProcessor(dummyObject)

// Now I call its render function, and the behavior I want is to log its src property
copyObject.render()

2 个答案:

答案 0 :(得分:0)

您可以使用Object.create()方法创建新对象,此新对象可以通过原型链访问dummyObject

var copyObject = Object.create(dummyObject)
copyObject.render = function() {...}   // access render method of dummyObject

var dummyObject = {
  src: 'Source code',
  fileExt: 'ejs'
};

var copyObject = Object.create(dummyObject);

dummyObject.render = function() {
  console.log('render method of dummyObject');
}

copyObject.render();

See MDN

答案 1 :(得分:0)

我无法判断你的帖子中是否有拼写错误,但如果你没有,那么这就是你的答案。看起来你似乎想说“访问所有原始对象属性”,在这种情况下不会,如果它们不在原型上并且你没有使用Object.create(oldObj.prototype)等创建对象

var obj = {
  a: true,
  b: 92
};

var changeIt = function ( o ) {
  return Object.assign({}, o, {
    render: function () {
      return this.b;
    }
  });
};

var newObj = changeIt(obj);

console.log(newObj.render()); // Prints 92 - value of obj.b and this.b