这就是我想要实现的目标:
var obj = {
something: 1,
someFunction: function () {
return 'hello';
}
};
wrap(obj).someFunction('hello'); // this should be different from obj.someFunction defined above
wrap(obj).something = 2; // this should still work
基本上,我想包装'一个对象,并用其他东西替换它中的所有函数。
以下是我如何定义wrap
功能:
function hello (v) {
return 'Hello ' + v;
}
function wrap (oldObj) {
var newObj = {};
for (var k in oldObj)
Object.defineProperty(newObj, k, {
get: function () {
if (typeof oldObj[k] === 'function')
return hello;
return oldObj[k];
},
set: function (val) {
oldObj[k] = val;
}
});
return newObj;
}
(hello
只是一个示例替代函数)
当我尝试使用它时,obj
中的所有内容都被一个函数替换(即偶数obj.something
,它被设置为1,被函数替换)。我似乎无法找到此代码的任何问题。我已经尝试过调试它,但还没有找到问题。
可能是什么问题?我怎么能解决这个问题?
编辑1 :我不想替换对象本身的函数,我想创建一个全新的对象。