Javascript类静态方法内存消耗

时间:2016-01-20 10:59:20

标签: javascript

Hello我知道原型定义一次并且对于所有对象实例都是通用的,但是每个都绑定到创建的新实例的上下文。我也知道它与定义的方法相比节省了内存在构造函数中使用this

function Person(name) {

    this.name = name;

    // each instance will have it's own talk method
    // so 500 * person instances = 500 * this.talk in memory
    this.talk = function(str) {
        console.log(this.name,"said",str);
    };

}

// 500 * person instances = 1 instance of talk2 in memory
Person.prototype.talk2 = function(str) {

    console.log(this.name,"said",str);

};

但是我不确定静态方法和内存消耗。

// 500 * person instances = x * talk3 in memory ?
Person.talk3 = function(str) {

    // code

};

他们是否喜欢原型?

3 个答案:

答案 0 :(得分:2)

您创建的Person个实例数无关紧要,只有一个Person.talk3函数。

附注:您对talktalk2的评论在创建函数对象的数量方面都是正确的。现代JavaScript引擎可能会在为其创建的500个函数对象中的每一个中重用{{1>}中的代码(如果有大量代码,这可能是相关的),但这是一个实现/优化细节。

答案 1 :(得分:1)

它们只是像原型那样被分配一次。除此之外,它们共享或以任何方式在实例上可用。

另外,"静态"您的示例中的Person.talk3方法在调用时会将Person函数本身作为上下文对象(" this")。除非您在静态方法中实际引用this,否则Person.talk3将与常规函数完全相同,例如function personTalk () {...}

答案 2 :(得分:0)

var p = new Person;
p.talk3(); // TypeError
talk3的实例上不存在

Person。它仅作为构造函数的属性存在,一次