javascript – 如何进行类实现?

TypeScript编译类如下:

var UrlProvider = (function(){
        //tons of logic in here that only needs to be performed once for each UrlProvider instance
        function UrlProvider(baseUrl){
            var baseRequest = {
                get: function(){return baseUrl;},
                update: function(){return baseUrl;},
                delete: function(){return baseUrl;}
            };
            var documents = function(){
                var context = '/documents/';
                return{
                    get: function(){return baseRequest.get() + context;},
                    post: function(){return baseRequest.post() + context;},
                    delete: function(){return baseRequest.delete() + context;}
                }
            };
            var editors = function(){
                var context = '/editors/';
                return{
                    get: function(){ return baseRequest.get() + context; },
                    post: function(){ return baseRequest.post() + context; },
                    delete: function(){ return baseRequest.delete() + context; }
                }
            }
        }
        return UrlProvider;
    })();

将逻辑放在UrlProvider构造函数之外,但在外部IIFE的闭包内有什么好处?我的想法是,如果我们需要一个远程服务或其他一些昂贵的过程来创建UrlProviders,那么它可能会更好地放置在外部闭包中而不是UrlProvider的构造函数中?这个对吗?将逻辑放在构造函数外部,但在IIFE内部是否有任何好处?

解决方法:

IS there any benefit to putting logic in outside the constructor, but inside the IIFE

是.继承需要IIFE来捕获基类.如下所示

class Foo {
    log() { }
}

class Bar extends Foo {
    log() {
        super.log(); // IIFE needed for `super` to work
    }
}

看看生成的javascript(我删除了extends函数).

var Foo = (function () {
    function Foo() {
    }
    Foo.prototype.log = function () {
    };
    return Foo;
})();

var Bar = (function (_super) {
    __extends(Bar, _super);
    function Bar() {
        _super.apply(this, arguments);
    }
    Bar.prototype.log = function () {
        _super.prototype.log.call(this); // IIFE needed for `super` to work
    };
    return Bar;
})(Foo);

_Super被IIFE捕获.原因是函数是在JavaScript中创建变量作用域的唯一因素,这就是为什么我们在codegen中创建一个IIFE来捕获一个漂亮的本地名称(_super)中的基类.这是传统的JavaScript,并非特定于TypeScript.

相关文章

我最大的一个关于TypeScript的问题是,它将原型的所有方法(无...
我对React很新,我正在尝试理解子组件之间相互通信的简洁方法...
我有一个非常简单的表单,我将用户电子邮件存储在组件的状态,...
我发现接口非常有用,但由于内存问题我需要开始优化我的应用程...
我得到了一个json响应并将其存储在mongodb中,但是我不需要的...
我试图使用loadsh从以下数组中获取唯一类别,[{"listing...