为什么在tabs.js中使用new关键字

时间:2015-05-04 06:50:27

标签: javascript jquery twitter-bootstrap

嘿伙计们,我刚刚浏览了tabs.js的代码,我遇到了以下几行代码:

  if (!data) $this.data('bs.tab', (data = new Tab(this)))
  if (typeof option == 'string') data[option]()

现在我有一个问题,上面两行代码,为什么使用新的关键字?为什么不能直接调用Tab()函数,如下所示:

Tab[option]()代替data[option]()

添加新关键字的这种编码惯例对于所有引导程序插件都是通用的,我只是想知道原因,我不是在问新关键字的作用,我只想问,为什么在这种情况下使用它?我已经在new关键字上阅读了此主题。

但我的问题是:

为什么要使用新关键字?为什么不能直接调用Tab()函数?

1 个答案:

答案 0 :(得分:2)

  

为什么要使用new关键字?为什么不能直接调用Tab()函数?

如果Tab以这种方式编写,那可能就是这样。显然它不是,它是作为标准构造函数编写的,因此你将它与new一起使用。

可能可能将其写为构建器/工厂函数。是否使用构造函数或构造函数的选择在很大程度上取决于风格(尽管道格拉斯·克罗克福德会告诉你使用构建器/工厂的理由很充分 - 他对此有很强的意见,但就是这样,意见< / em> :-))。

为了完整起见,构造函数按以下方式编写:

function Tab(arg) {
    this.prop = "something";
    this.thingy = arg; // Or something less direct
    // ...
}
Tab.prototype.method = function() {
    // ...
};

如您所见,它希望通过new调用,并将属性放在this上,这是对new创建的新对象的引用。

建造者/工厂的编写方式如下:

function createTab(arg) {
    return {
        prop: "something",
        thingy: arg // Or something less direct
        method: function() {
            // ...
        }
        // ...
    };
}

或者可能是这样的:

var tabPrototype = {
    method: function() {
        // ...
    }
};
function createTab(arg) {
    var obj = Object.create(tabPrototype);
    obj.prop = "something";
    obj.thingy = arg; // Or something less direct
    return obj;
}