微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐