这在Javascript中被认为是一种很好的做法:使用这个或自我引用?

时间:2015-01-23 03:59:33

标签: javascript

我见过这样的代码:

var foo = {
    bar: function() {
        foo.baz(); // instead of this.baz();
    },
    baz: function() { ... }
}

使用这种方法可能会遇到一些问题吗?它是否会比“this”更不容易出错(考虑到这可能会从上下文变为上下文这一事实)?它会引入任何副作用吗?我应该选择哪个?为什么?

2 个答案:

答案 0 :(得分:1)

由于foo是一个单例(只有一个像这样的对象,并且它的引用存储在foo变量中),你可以这样做。

如果这是通过构造函数或工厂函数创建的(因此不是单例 - 这样可能有很多),那么你肯定想要使用this以便调用{{1}用适当的对象引用。

使用baz()有一个优势,当它是一个单身时,无论foo.baz()如何被调用(例如,无论bar()的值是什么this被调用,它仍会正确调用bar()

例如,如果您将foo.baz()作为回调引用传递,那么它仍然可以正常工作(即使foo.bar设置为其他内容)。

答案 1 :(得分:0)

如果您要使用foo制作其他对象,请使用类似Object.create()的内容,这可能是一个坏主意。


Object.create()

if (typeof Object.create !== 'function') {
  Object.create = function (o) {
    function F() {}
    F.prototype = o;
    return new F();
  };
}
newObject = oldObject.beget();

了解详情:Prototypal Inheritance in JavaScript