首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给javascript方法起别名?

问给javascript方法起别名?
EN

Stack Overflow用户
提问于 2017-01-05 06:19:33
回答 2查看 618关注 0票数 0

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

代码语言:javascript
复制
var foo = {
    bar: function(a) {},
    baz: 42
}

我正在尝试重构,将所有方法移动到一个新的methods对象中:

代码语言:javascript
复制
var foo = {
    methods: {
        bar: function(a) {},
    }
    baz: 42
}

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

EN

回答 2

Stack Overflow用户

发布于 2017-01-05 06:35:18

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

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

​

代码语言:javascript
复制
// 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();

​

票数 0
EN

Stack Overflow用户

发布于 2017-01-05 06:29:16

已更新

代码语言:javascript
复制
var foo = { 
    methods: { 
        bar: function(a) { return true; } 
    }, 
    baz: 42,
    bar: function() { return this.methods.bar() } 
}

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

bar: this.methods.bar

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41474177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档