在JavaScript静态实例上使用构造函数
Using a constructor on a JavaScript static instance
我正在编写一个JavaScript库,其中我想要一些方法和属性公共和其他私有。下面的代码看起来是一个很好的方法,同时把所有内容都包装到一个对象中。
(function (window) {
var Thing = function() {
// private var
var variable = "value";
return {
// public method
method:function() {
alert(variable);
}
}
}();
window.Thing = Thing;
})(window);
Thing.method();
这很好。(大部分是从这里抓取的)。
然而,我仍然希望能够使用Thing
的构造函数来传递一些参数。
我是否可以在返回语句中提供构造函数,或者使用prototype来覆盖构造函数?所以我可以调用:
Thing(stuff);
现在,如果我尝试,它会导致:
Uncaught TypeError: Property 'Thing' of object [object DOMWindow] is not a function
这是有意义的,因为它不返回自己,但理想情况下,可以调用构造函数。
或者,这是不是太糟糕了,我应该避开一些或所有这些?
要完成您的要求,请这样做:
(function (window) {
var thingMaker= function(stuff) {
// private var
var variable = "value";
return {
// public method
method:function() {
alert(variable);
}
alertStuff:function() {
alert(stuff);
}
}
};
window.thingMaker= thingMaker;
})(window);
var myThing = window.thingMaker(stuff);
myThing.alertStuff()
更多信息可以通过搜索谷歌搜索道格拉斯·克罗克福德。你可以在yui剧院看到他制作的一些很棒的视频。但是我不得不问,既然已经有这么多优秀的框架(jquery,prototype,yui,dojo等等),为什么还要创建另一个框架呢?
Thing
已经创建,所以您总是会太晚调用'构造函数'。
你可以像这样传递变量:
(function (window, var1, var2) {
var Thing = function() {
// private var
var variable = "value";
return {
// public method
method:function() {
alert(variable);
}
}
}();
window.Thing = Thing;
})(window, var1, var2);
Thing
是Object
,有一个方法叫做method
:
{
// public method
method:function() {
alert(variable);
}
}
Thing.method(); // alerts "value"
你可以返回:
function () {
alert(arguments)
}
然后Thing(6,5,4); // alerts 6,5,4
相关文章:
- ES6构造函数返回基类的实例
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- 为什么实例构造函数指向最上面的函数构造函数对象
- 主干和RequireJS冲突-实例或构造函数
- 在定义了构造函数之后,是否可以将实例属性添加到JavaScript原型中
- 销毁构造函数实例
- 在nodejs中,如何使模块的单个实例具有不同参数的构造函数
- 构造函数的“实例”是否有严格的定义
- 只为构造函数的所有实例触发一次事件侦听器
- 如何实例化其构造函数使用 yield 的对象
- 在实例化期间使用构造函数变量
- 为什么更改函数的 .prototype 会影响已使用该构造函数创建的对象的“实例”
- 从构造函数实例化的类范围对象
- 使用Object.keys获取用于创建构造函数实例的属性,然后打印继承的属性
- 将新返回命名函数构造函数实例-
- 测试构造函数实例化另一个类
- 简单对象vs.工厂vs.构造函数-实例
- prototype属性的构造函数实例的奇怪行为
- 通过构造函数实例化时添加额外属性的Javascript语法
- 为什么我们使用“原型”?属性向构造函数实例添加方法