什么是适当的,现代的和跨浏览器安全的创建JavaScript类的方法?

时间:2012-08-08 08:46:15

标签: javascript oop

我对数百种创建JS类的方法感到困惑。一个说我应该使用原型,而另一些人说没有人使用原型,因为它是“坏”。另一方面,CoffeeScript使用原型,但用一个返回自身(或其他东西)的函数包装一个构造。我见过返回一个对象的函数,这个函数返回一个返回一个对象的函数等。

我认为它应该很容易,并且不需要框架来创建语言中的类 - 也许我错过了一些东西。

还有两种(至少)创建方法的方法:foo: function() {}function foo() {}。我甚至在单班上看到过这两种方式。问题是,第一种方法导致创建匿名函数(恰好分配给对象的字段),调试器说错误发生在匿名函数调用匿名函数等。

我理解JS的目的是实现功能而不是OOP,但有时候类是描述概念的最佳方式(例如,UI小部件想成为一个类)。

我很感激一个正确构造的类的例子,几乎没有解释的话。

3 个答案:

答案 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框架同时提供了更清晰的语法。