创建JavaScript类的正确、现代且跨浏览器安全的方法是什么?
我对创建JS类的数百种方法感到困惑。一个说我应该使用原型,而另一个说没有人使用原型,因为它“不好”。另一方面,CoffeeScript使用原型,但使用返回自身(或其他)的函数包装构造。我见过返回对象的函数,返回返回对象的函数等等 我认为用一种语言创建类应该很简单,不需要框架——也许我遗漏了什么 还有两种(至少)创建方法:创建JavaScript类的正确、现代且跨浏览器安全的方法是什么?,javascript,oop,Javascript,Oop,我对创建JS类的数百种方法感到困惑。一个说我应该使用原型,而另一个说没有人使用原型,因为它“不好”。另一方面,CoffeeScript使用原型,但使用返回自身(或其他)的函数包装构造。我见过返回对象的函数,返回返回对象的函数等等 我认为用一种语言创建类应该很简单,不需要框架——也许我遗漏了什么 还有两种(至少)创建方法:foo:function(){}和function foo(){}。我甚至在一节课上见过这两种方法。问题在于,第一种方法会导致创建无注释函数(它恰好被指定给对象的一个字段),调试
foo:function(){}
和function foo(){}
。我甚至在一节课上见过这两种方法。问题在于,第一种方法会导致创建无注释函数(它恰好被指定给对象的一个字段),调试器说错误发生在由无注释函数等调用的无注释函数中
我知道JS是功能性的,而不是OOP,但有时类是描述概念的最佳方式(例如,UI小部件希望成为类)
我很感激一个构造正确的类,很少有解释的话。
如果你对使用咖啡稿有信心,它对类有很好的处理方法,并且与其他任何OOP框架相比,你可以得到清晰的语法。
< P>我认为你可以考虑咖啡稿产生的“好”的代码:我认为这篇文章很好地解释了这一点:
这是(我相信)在基于原型的语言(如javascript)中使用类的正确方法,并对概念进行了很好的解释。我在我的项目中使用这种方法,它似乎在所有现代浏览器中都能工作。您可以将方法声明为
foo:function foo(){}
,而不会在调试程序中遇到问题。这是javascript的真正问题。JS权威机构没有任何文档,或者如果有,那么它就太复杂了(JavaScript是一种基于原型的语言,所以当你使用构造函数(“类”)时,你真的应该使用原型来添加功能。只有扩展其他非你自己的函数的原型才被认为是不好的做法——这就像修改类的代码。实际上我不想(不能)使用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;
})();