别名javascript方法?

时间:2017-01-04 22:19:33

标签: javascript proxy alias

我有一个包含属性和方法的对象:

var foo = {
    bar: function(a) {},
    baz: 42
}

我尝试重组,将所有方法移动到新的methods对象中:

var foo = {
    methods: {
        bar: function(a) {},
    }
    baz: 42
}

是否可以在保留向后兼容性的同时删除foo.bar()?例如。当用户尝试foo.bar(a)时,它的别名为foo.methods.bar(a)

2 个答案:

答案 0 :(得分:0)

<强>更新

var foo = { 
    methods: { 
        bar: function(a) { return true; } 
    }, 
    baz: 42,
    bar: function() { return this.methods.bar() } 
}

您需要保留一个引用,例如:

bar:this.methods.bar

答案 1 :(得分:0)

对象文字通常用于存储状态(属性),而不是具有行为(方法)的对象,除非我们使用静态方法讨论对象。

通常,在使用方法创建对象时,应该创建构造函数而不是对象文字,然后应该在该对象的原型上设置方法。

// Use constructor functions for instantiatable objects
function foo () {
  // Local variables and instance properties are defined in the constructor
  
  // Set up a simple proxy reference:
  this.bar = this.methods.bar;
  this.baz = 42;
}

// Set up methods on the prototype, not the constructor because the 
// algorithms stored in these properties won't change from instance
// to instance, so we should just store them once - on the prototype
// that all instances of foo will inherit. 
foo.prototype.methods = {
  bar : function (a) {
    console.log("Hello from foo.methods.bar!");
  }
};

// Instantiate a "foo"
var f = new foo();

// Call the proxy
f.bar();