Javascript 为什么在tabs.js中使用新关键字
嘿,伙计们,我刚刚浏览了的代码,我遇到了以下代码行:Javascript 为什么在tabs.js中使用新关键字,javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,嘿,伙计们,我刚刚浏览了的代码,我遇到了以下代码行: if (!data) $this.data('bs.tab', (data = new Tab(this))) if (typeof option == 'string') data[option]() 现在我有一个问题,关于上面的两行代码,为什么要使用新的关键字?为什么不能直接调用Tab()函数,如下所示: 选项卡[选项]()而不是数据[选项]() 这种添加新关键字的编码惯例对所有引导插件都是通用的,我只是想知道为什么,我不是问新
if (!data) $this.data('bs.tab', (data = new Tab(this)))
if (typeof option == 'string') data[option]()
现在我有一个问题,关于上面的两行代码,为什么要使用新的关键字?为什么不能直接调用Tab()
函数,如下所示:
选项卡[选项]()
而不是数据[选项]()
这种添加新关键字的编码惯例对所有引导插件都是通用的,我只是想知道为什么,我不是问新关键字做什么,我只是问,为什么在这个场景中使用它?我在这里读过这个关于关键字的帖子
但我的问题是:
为什么要使用新的关键字?为什么不能直接调用Tab()
函数
为什么要使用new
关键字?为什么不能直接调用Tab()
函数
如果Tab
是这样写的,它可能是。显然不是,它是作为标准构造函数编写的,因此您可以将它与new
一起使用
可以将其作为构建器/工厂函数编写。选择使用构造器还是使用构造器在很大程度上取决于风格(尽管道格拉斯·克罗克福德会告诉你使用构造器/工厂有很好的理由——他对此有很强的观点,但事实就是这样,观点:-))
为了完整起见,构造函数是按照以下方式编写的:
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;
}
或者像这样:
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;
}
@TJCrowder,我会看你的答案,但我只想说,你是我的榜样:D@TJCrowder非常感谢,解释得很好,是的,我知道道格拉斯·克罗克福德不喜欢这个新关键词。最后,你能编辑你的答案吗?如果按工厂,你指的是工厂设计模式??非常感谢@Tenali_raman:不,只是一个无聊的老工厂函数:一个创建实例的函数。工厂模式比这更重要;工厂函数被定义为子类实现的接口,这样基类工厂就可以创建实例,而不必知道它正在创建什么特定的子类类型。这是一个简单工厂函数的超集。@TJCrowder,谢谢你,谢谢你的解释。非常感谢。