我有一个包含属性和方法的对象:
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)
?
答案 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();