if (!data) $this.data('bs.tab', (data = new Tab(this)))
if (typeof option == 'string') data[option]()
现在我有一个问题,上面两行代码,为什么使用新的关键字?为什么不能直接调用Tab()
函数,如下所示:
Tab[option]()
代替data[option]()
?
添加新关键字的这种编码惯例对于所有引导程序插件都是通用的,我只是想知道原因,我不是在问新关键字的作用,我只想问,为什么在这种情况下使用它?我已经在new关键字上阅读了此主题。
但我的问题是:
为什么要使用新关键字?为什么不能直接调用Tab()
函数?
答案 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;
}