我想做的是加载javascript以在对象中创建一个方法库,并等到该对象第一次被使用,然后再实际定义或编译。我想在这个对象被完全定义之前建立对它的引用。当我在对象上的方法被定义之前第一次调用这个对象上的方法时(意味着对象实际上没有方法),我想定义对象然后调用该方法。如果对象上尚未定义“sayHello()”,有没有办法使用诸如“MyLibrary.sayHello()”之类的标准语法来做到这一点。我想它看起来像这样:
var independentVar = "noCommitments";
var MyLibrary = function(user_ini){
//MyLibrary.init looks like
// (function(ini){
// var a = ini;
// return function(){
// //Notice the method sayHello defines when called,
// // and does not return a reference
// return {
// b:a,c:"c",sayHello:function(z){return "Hello"+a+z}
// }
// }
// })(user_ini);
var d1 = myRequire("MyLibrary.init");
return {
**handleAll : function(){ this = d1(); this.("**calledMethod")}
}
};
var greeting = MyLibrary.sayHello();
alert(greeting);
这只是伪代码。如果我添加一个清理方法,我可以将该对象返回到未初始化状态“{**handleAll:function(){/ noContext/}}”。我的应用程序/库以这种方式有一个存根和一个链接,可以在未定义状态下立即使用,在构建模块时,这对于减少对实用程序的引用数量很有用,比如帖子有一个功能菜单,这些功能由所有帖子共享, - 使用此处描述的机制,只有“活动帖子”/“焦点帖子”将引用该实用程序。更不用说激活和删除的能力-activate modules. 特殊的部分是模块已经预热,即使它们还没有引用它们,它们也准备好调用函数,它类似于实时绑定,但允许整个用户界面已经用已经存根的函数定义使用它们可用时的确切名称。对我来说,在这个模型中很容易找到默认和去抖动的控制机制。
我的问题是:这种类型的脚本是否可以在本地使用,或者我是否必须使用某种形式的编译,例如 TypeScript、CoffeeScript 或其他。我知道如果我将我想调用的方法作为参数传递给单例工厂,这是可能的。我最终希望整个应用程序能够优雅地降级未使用的功能而不会污染代码。
我所说的污染是什么意思:
var LibDef = (
function(){
return {
callUndefined:function(methodName){
var returnVal = {}
}
}
})()
var MySingltonLibrary = moduleSinglton.getLibrary("MyLibrary", Lib);
var greeting = MySingltonLibrary.callUndefined("sayHello");
//
// Please use your imagination to consider the complexity in the singlton