我对数百种创建JS类的方法感到困惑。一个说我应该使用原型,而另一些人说没有人使用原型,因为它是“坏”。另一方面,CoffeeScript使用原型,但用一个返回自身(或其他东西)的函数包装一个构造。我见过返回一个对象的函数,这个函数返回一个返回一个对象的函数等。
我认为它应该很容易,并且不需要框架来创建语言中的类 - 也许我错过了一些东西。
还有两种(至少)创建方法的方法:foo: function() {}
和function foo() {}
。我甚至在单班上看到过这两种方式。问题是,第一种方法导致创建匿名函数(恰好分配给对象的字段),调试器说错误发生在匿名函数调用匿名函数等。
我理解JS的目的是实现功能而不是OOP,但有时候类是描述概念的最佳方式(例如,UI小部件想成为一个类)。
我很感激一个正确构造的类的例子,几乎没有解释的话。
答案 0 :(得分:3)
我认为你可以考虑CoffeeScript生成的代码“好”:
// Create a "class" named Foo = create a variable that contains whatever the
// self-invoking anonymous function returns (the function avoids the pollution
// the global namespace).
var Foo = (function() {
// Create the "class" = the constructor function that is supposed to be used
// with the "new" keyword to create instances (objects).
function Foo() {}
// Add a method "bar" (that's what the prototype is for!)
Foo.prototype.bar = function(baz) {
// Assign the value to a member variable of the current instance (this)
this.foobar = baz;
};
// ...add more stuff.
// Return only the function, every other local variable stays in this scope.
return Foo;
})();
答案 1 :(得分:3)
我认为这篇文章解释得很好:
https://developer.mozilla.org/en-US/docs/JavaScript/Introduction_to_Object-Oriented_JavaScript
这是(我相信)在基于原型的语言(如javascript)中使用类的正确方法,并对这些概念进行了很好的解释。我在我的项目中使用这种方法,它似乎适用于所有现代浏览器。
答案 2 :(得分:0)
如果您对使用CoffeeScript充满信心,那么它具有扎实的类方法,并且与任何其他OOP框架同时提供了更清晰的语法。