javascript - 这个 javascript 原型(prototype)模式有什么好处?

标签 javascript prototype

我看到一些代码以这种方式定义了原型(prototype)中的方法:

function Class() {...}
(function() {
    this.method1 = function() {...};
    this.method2 = function() {...};
}).call(Class.prototype);

与其他构造相比,此构造有何优势?以下是一些其他示例:

function Class() {...}
Class.prototype = {
    method1: function() {...},
    method2: function() {...}
};

function Class() {...}
Class.prototype.method1 = function() {...};
Class.prototype.method2: function() {...};

function Class() {...}
Class.prototype = Object.create({...}, {...});
Class.prototype.constructor = Class;

我知道以下在内存方面效率较低,因为每个实例都有自己的 method1 和 method2 副本:

function Class() {
    var privateVar = 0;
    this.method1 = function() {...};
    this.method2 = function() {...};
}

当然,这种构造的好处是方法可以访问私有(private)变量。

最佳答案

片段#1 和#3 做同样的事情。第一个的好处是您不需要重复 Class.prototype.,甚至可以定义静态“类局部”变量。但是,.call 的用法并不常见,主要是使用一个名为proto 左右的简单参数:

function Class() {...}
(function(p) {
    p.method1 = function() {...};
    p.method2 = function() {...};
}(Class.prototype));

Defining a Javascript prototype 中介绍了这种对各个属性的分配与片段 #2 之间的区别。 .

片段 #4 对您的使用 {...} 做了什么有点不清楚。然而,Object.create通常用于 inheritance between classes .

Use of 'prototype' vs. 'this' in JavaScript? 中详细介绍了原型(prototype)方法和实例特定方法之间的区别(片段 #5) .

关于javascript - 这个 javascript 原型(prototype)模式有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23556185/

相关文章:

使用 defineProperty 的 JavaScript 原型(prototype)继承

javascript - 如何在winjs中设置png图像颜色

javascript - 动态添加的纸按钮未正确呈现

internet-explorer - 通过 SignalR 在 IE 中缺少原型(prototype)方法

javascript - Javascript constructor 属性的意义是什么?

javascript - 一个对象的原型(prototype)可以改成另一个对象吗?

arrays - AutoHotkey 是否能够以从零开始的顺序定义数组?

javascript - 如何添加提交按钮以转到我刚刚使用 javascript 创建的 url

javascript - 为什么在 PHP 中使用 intval 和 hexdec 内置函数的十六进制到十进制字符串输出不同?

javascript - For 循环意外增量值