Javascript构造函数、原型和实例化.架构和框架
Javascript constructor, prototype and instantiation. Architecture and Framework
我正在开发一个"框架",并发现自己正在编写模块。
对于每个模块存在一组通用初始化规则和一组通用函数。
步骤1。构造函数:
var ns = "namespace1";
t.scenarios[ns] = function (container, instanceName, options) {
// common for all scenarios, e.g. options initialization
t.core.defaultScenarioConstructor(this, ns, container, instanceName, options)
// things only for NAMESPACE1
this.PROPERTY1 = 1;
}
第2步。(与问题相关)然后我有一个的原型
var p = t.scenarios[ns].prototype;
p.newfunction = function(){
this.PROPERTY1; // accessible
}
其中填充了THINGS_ONLY_FOR_NAMESPACE1
t.core.defaultScenarioPrototype(p);
步骤3/4。实例化类(使用new关键字)&调用dom生成器
p.initNewView = function(container) {/* build dom and assign handlers*/}
现在的问题是。。。我想在另一个"核心"模块中进行常见的构造函数/原型初始化。如果在第2步中,我们将函数添加到原型中,那么它们具有"this"关键字,并且可以访问CURRENT_INTANCE字段,例如PROPERTY1。
然而,如果原型作为变量传递给"defaultScenarioPrototype"构建器,那么所有函数都有CORE类的另一个"this",构建器就在这里。
我们应该如何将"通用"函数添加到来自另一个模块的原型中?
根据请求,我将添加我的评论作为答案。要在特定的this
上下文中调用函数,可以使用function.prototype.call、function.protoype.apply或function.prototype.bind.
在传递回调而不想使用闭包的情况下,经常使用绑定:
setTimeout(myOjbect.somefunction,100);//this in somefunction is window
setTimeout(function(){
myObject.somefunction();
},100);//this in somefunction is myObject but a closure is created
setTimeout(myObject.somefunction.bind(myObject),100);//this is myObject
//and no closure is created
有人会认为绑定使用的内存更少,速度更快,但我最近在某个地方读到绑定实际上比传递闭包慢,所以我也不确定内存消耗情况。
相关文章:
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- 如何在用户输入时实例化数组
- 在requirejs中共享实例化对象
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- Angular重命名模块后未能实例化模块
- Backbone relational无法实例化两个RelationalModel对象
- 我应该如何用javascript实例化这个日期
- AngularJS出错-无法实例化模块
- 谷歌地图重叠MarkerSpiderfier实例化问题
- 未捕获错误:由于,[$injector:moduler]未能实例化模块polmgr
- ngRoute不是因果报应实例化的
- JavaScript 中的动态实例化
- 在文本框上绑定谷歌地点自动完成,而无需实例化谷歌地图
- UI5 路由不实例化视图
- 在 JavaScript 中,当我们实例化派生对象时,原型的函数隐藏在哪里
- 仅在需要时实例化聚合物元素
- 角度 JS 控制器未实例化
- 如何理解“当类实例化时,JavaScript静态方法也是不可调用的”
- 在 Typescript 中实例化对象,遵循松散耦合
- Javascript构造函数、原型和实例化.架构和框架