我如何'包装'一个对象并替换它中的所有函数?

时间:2014-10-05 13:52:28

标签: javascript function object wrapper

这就是我想要实现的目标:

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 :我不想替换对象本身的函数,我想创建一个全新的对象。

0 个答案:

没有答案