我有这段代码:
(function() {
function App(elements, options) {
if (!this instanceof App) return new App(elements, options);
var that = this;
return this;
}
window.App = App;
})();
App(document.querySelectorAll('.Slider-slide'), {
interval: 5000
});
我的问题是,它永远不会创建App
的新实例,所以,this
代码下面的Window
始终是{{1}}对象,任何想法为什么??
答案 0 :(得分:6)
你的if条件是问题:
if (!this instanceof App)
应该是:
if (!(this instanceof App))
答案 1 :(得分:0)
更新,可以使用以下两种模式中的任何一种来纠正代码:
(function() {
function App(elements, options) {
if (!(this instanceof App)) return new App(elements, options);
var that = this;
}
window.App = App;
})();
var myapp = App(document.querySelectorAll('.Slider-slide'), {
interval: 5000
});
此class
结构不需要new
调用:
(function() {
function App(elements, options) {
var that = this;
}
//calling window.App(/*stuff*/) will always return a new class
window.App = function(elements, options) {
return new App(elements, options);
};
})();
一个小注意事项 - 当你创建一个类时,你不需要返回它,因为这是隐式处理的。