为什么TypeScript会添加“原型”?

时间:2013-11-09 20:59:23

标签: typescript

我的打字稿代码:

export class File {
    isOpenEnabled() {
        return false;
    }

    openClicked() {
        debugger;
    }
}

define([], function () {
    return {
        handler: new File()
    };
});

变成了:

define(["require", "exports"], function(require, exports) {
    var File = (function () {
        function File() {
        }
        File.prototype.isOpenEnabled = function () {
            return false;
        };

        File.prototype.openClicked = function () {
            debugger;
        };
        return File;
    })();
    exports.File = File;

    define([], function () {
        return {
            handler: new File()
        };
    });
});

为什么插入原型?

谢谢 - 戴夫

2 个答案:

答案 0 :(得分:2)

javascript中的函数是对象。

例如:

function MyClass () {

  this.MyMethod= function () {};
}

每次创建MyClass的新实例时,都会创建MyMethod的新实例。 更好的方法是将函数MyMethod添加到MyClass

的原型中
MyClass.prototype.MyMethod = function(){};

这样,无论您创建了多少MyClass个实例,都只会创建一个MyMethod

回到你的问题我认为打字稿正在对你在File类中定义的方法进行这种优化。

答案 1 :(得分:1)

有两个原因:

  • 内存优化(已经由Alberto提及)
  • 原型继承

第二个原因以及第一个原因很好地涵盖在:http://javascript.crockford.com/inheritance.html