【发布时间】:2014-07-28 19:49:20
【问题描述】:
很长时间以来,我一直在通过执行以下操作来编写 JavaScript 类
function MyClass(){
this.v1;
this.foo = function(){
return true;
}
};
然后我找到了 TypeScript,它看起来像是把它的类编译成
var MyClass = (function () {
function MyClass(message) {
this.v1 = message;
}
MyClass.prototype.foo = function () {
return "Hello, " + this.v1;
};
return MyClass;
})();
另一种我在网上找到很多的方法是
var MyClass = {
v1:1,
foo: function(){
return true;
}
};
这对我来说看起来很难看,但也许我错过了这种方法的好处,因为它看起来是网络上大多数人在 javaScript 中处理对象的方式。
我能够从我制作的函数中进行继承的第一种方法。
Function.prototype.extends = function(parent){
this.prototype = new parent();
this.prototype.constructor = this;
};
我还看到了许多其他在 JavaScript 中创建类的方法。我想知道我的方法是否错误,或者是否有做 OOP 的最佳实践方法。我所做的所有项目都使用第一个示例。你可以在https://github.com/Patrick-W-McMahon 上看到,现在我看到 JavaScript 编译器在做什么,我开始质疑我的方法。我想知道其他 JavaScript 程序员建议什么是最好的方法,以及这些方法之间是否存在差异。我来自 C++/Java 背景,因此我编写 JavaScript 以匹配我的背景。
【问题讨论】:
-
在 js 中有上百万种不同的方式来做“OOP”;都有一些小的优点和缺点,但这些差异很少会叠加起来以做出“正确”或“错误”的事情。你的代码可能更像是 Brendan 的想法,而不是 typescript 的版本。
-
两者都应该工作,但使用
prototype更标准。 -
第一个例子你不能实现继承或多态。例如,由 new(MyClass) 创建的所有对象都将从 object 继承,仅此而已。
-
拥有 this.foo() 和 this.prototype.foo() 会有什么不同
标签: javascript class oop methods