返回一个对象,但不使用新的关键字,Javascript?
问题描述:
我想创建一个对象,返回没有在JavaScript中的关键字new
?返回一个对象,但不使用新的关键字,Javascript?
到目前为止我的代码结构;
myLib.func = (function() {
"use strict";
function func() {
this._init();
};
func.prototype._init = function() {
this.someVar = 5;
};
Return func;
})();
这显然只适用于使用关键字new
;
new myLib.func();
我该怎么做才能做到;
var func = myLib.func();
但它仍然会返回一个与第一个例子完全相同的对象吗?
我已经试过
myLib.func = (function() {
"use strict";
function func() {
if (window === this) {
return new myLib.func();
} else {
this._init();
}
};
func.prototype._init = function() {
this.someVar = 5;
};
Return func;
})();
这不工作,我从一个例子学到了约翰Resig的建设图书馆技巧滑动器25,http://ejohn.org/blog/building-a-javascript-library/
我知道目前已经有现有的框架,但是滚动自己会让我学到很多东西,正如你现在看到的那样不是很多!
答
在strict mode中,this
默认为undefined
。
if (window === this || undefined === this) {
return new myLib.func();
} else {
this._init();
}
或通过检查目前的对象是(使用instanceof
)的构造函数的实例:您可以将其添加到您的情况考虑这个功能。
if (this instanceof func) {
this._init();
} else {
return new func();
}
(PS你”已经有你的代码一个错字,JavaScript是大小写敏感的,所以你应该在最后使用return
代替Return
)
答
如果你并不真正需要的公共/私有方法,你可以使用对象文本
var myLib = {};
myLib.func = {
_init: function() {
this.someVar = 5;
},
doSomething: function(a, b) {
return a + b;
}
};
这将是一个单独的对象,通常这是不够的JavaScript applciation。如果你需要一个对象的很多实例,你将*在某处放置一个“新”关键字。
答
如果myLib.func
是你的类名,你不能把它像var func = myLib.func();
。 但是,你可以包装后一到另一个函数,这样你得到
var factory = function(){
var func = myLib.func();
return func;
}
这是真棒!非常感谢你:)我想我会用第二个例子,它更简洁,更易于阅读!感谢您的错字提示 – user2251919 2013-05-13 08:35:43
@ user2251919最后一件事,我只会写'new func();'而不是'new myLib.func();'。通过这样做,代码变得更加便携。例如,如果您决定重命名'myLib',或者重新分配'myLib.func',那么代码仍然会按预期运行。 – 2013-05-13 08:43:21
再次感谢,一个非常好的提示。 – user2251919 2013-05-13 08:48:21