我喜欢创建漂亮的OO javascript,有时候会使用原型,有时会更加原生。在很多情况下,我创建了类似这样的javascript类
var myObject = myObject || {};
myObject.Example1 = function () {
"use strict";
// ctor
function self() { }
// init
self.init = function () {
console.log("Example 1 did init");
};
return self;
};
myObject.Example2 = (function ($) {
"use strict";
// ctor
function self() { }
// init
self.init = function () {
console.log("Example 2 did init");
};
return self;
})($);
但我似乎忘记了为什么我不能创建用()和$附带的函数的实例。
var obj1 = new myObject.Example1();
obj1.init(); // Does init
var obj2 = new myObject.Example2();
obj2.init(); // Does not init (obj2.init is not a function)
myObject.Example1()按预期工作,但为什么我不能调用myObject.Example2()?
答案 0 :(得分:2)
使用模式'从闭包中创建对象'的正确方法是这样的:
myObject.Example2 = (function ($) {
return function () {
"use strict";
// ctor
function self() { }
// init
self.init = function () {
console.log("Example 2 did init");
};
return self;
}
})($);
答案 1 :(得分:1)
Example2
是函数的返回值,它定义了一个名为self
的函数,为其添加了一个属性,然后返回该函数。
Example1
具有几乎相同的功能,但由于 end 没有()
,因此不会调用它,因此{{1}的值那个函数而不是它里面定义的函数。
这与Example1
和function () {
之间的差异以及与function ($) {
和};
之间的差异无关。
由于您未在函数内使用})($)
,因此$
参数完全无关紧要。