所以我正在尝试一些看起来很棘手但又无法理解的事情。
我有一个像这样的对象:
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()
答案 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();
答案 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