【发布时间】:2014-02-16 16:06:40
【问题描述】:
在 JavaScript 中,定义类(构造函数)函数方法通常是这样完成的:
function Class1() {
// ... code ...
}
Class1.prototype.method1 = function(args) {
// ... code ...
};
按照 ECMAScript 的一般语法/语义规则,我没有理由不能覆盖/更改/扩展原始 Object.prototype
function Class1() {
// ... code ...
this.prototype.method1 = function(args) {
// ... code ...
};
}
那为什么不这样做呢?代码看起来有点混乱,但写和读起来更快更干净(将所有与 Class1 相关的方法放在 Class1 本身的下面)。这不是更好的用途吗?
【问题讨论】:
-
您的第二个示例代码将不起作用。构造函数内部
this的值不是构造函数;它是新创建的对象的值。 -
那我可以通过
this.constructor访问它吗?我不妨编辑我的问题。 -
构造函数为实例化的每个对象运行。每次构建新对象时,您都会向原型添加一组新的相同函数,这对性能有相当大的影响。
-
我强烈建议您查看augment 项目。即使您不使用该库,代码也是了解这些东西如何工作的好方法。
-
关于原型和构造函数的解释我已经创建了这个答案,希望对您有所帮助。stackoverflow.com/a/16063711/1641941
标签: javascript oop syntax prototype