Javascript类静态方法内存消耗
Javascript class static methods memory consumption
您好,我知道原型只定义一次,并且对于所有对象实例都是通用的,但是每个对象实例都绑定到所创建的新实例的上下文中。我也知道,与在构造函数中使用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
};
它们是否像原型?
无论您创建多少个Person
实例,都只有一个Person.talk3
函数。
旁注:您关于talk
和talk2
的评论在创建函数对象的数量方面都是正确的。现代 JavaScript 引擎可能会在为其创建的 500 个函数对象中的每个对象中重用 talk
中的代码(如果有很多代码,这可能是相关的),但这是一个实现/优化细节。
它们只是像原型一样,因为它们被分配一次。除此之外,它们不会以任何方式在实例上共享或可用。
此外,像示例中Person.talk3
这样的"静态"方法在调用时会将Person
函数本身作为上下文对象(" this
")。除非您在静态方法中实际引用this
,否则Person.talk3
将与常规函数完全相同,例如 function personTalk () {...}
.
var p = new Person;
p.talk3(); // TypeError
talk3
在 Person
的实例上不存在。它只作为构造函数的属性存在一次。
相关文章:
- 无法理解JavaScript中的静态方法
- 从构造函数es6调用静态方法
- 如何理解“当类实例化时,JavaScript静态方法也是不可调用的”
- Javascript:如何声明非全局静态方法
- 定义的静态方法未定义
- 使用 Babel 转译器导入类并调用带有 ES6 模块的静态方法
- 从常规ES6类方法中调用静态方法
- React中的静态方法
- React中的单元测试非静态方法
- JavaScript中的静态方法
- 可以't从客户端应用程序引用插件中定义的静态方法
- 静态方法中的Javascript“this”
- 如何在 ReactJS 中限制静态方法
- Javascript 静态方法继承
- 猫鼬静态方法返回蓝鸟承诺
- 如何继承静态方法
- 如何获取 javascript 类中的静态方法列表
- 如何在 javascript 中定义静态方法类
- Jquery UI 调用小部件的静态方法
- Javascript类静态方法内存消耗