什么是创建 JavaScript 类的适当、现代和跨浏览器安全的方法
What is a proper, modern and cross-browser safe method of creating JavaScript classes?
我对数百种创建JS类的方法感到困惑。一个说我应该使用原型,而另一些人说没有人使用原型,因为它"不好"。另一方面,CoffeeScript 使用原型,但用函数 whick 返回自身(或其他东西)包装结构。我见过返回对象的函数,返回返回对象的函数等。
我认为这应该很容易,并且不需要框架来用语言创建类 - 也许我错过了一些东西。
还有两种(至少)创建方法的方法:foo: function() {}
和function foo() {}
。我什至在单堂课上见过这两种方式。问题是第一种方法导致创建匿名函数(碰巧被分配给对象的字段),调试器说由匿名函数等调用的匿名函数中发生了错误。
我知道JS的目的是功能性而不是OOP,但有时类是描述概念的最佳方式(例如,UI小部件想要成为一个类)。
如果能提供一个正确构造类的例子,我会很感激,只有几句话的解释。
我认为这篇文章解释得很好:
https://developer.mozilla.org/en-US/docs/JavaScript/Introduction_to_Object-Oriented_JavaScript
这是(我相信)在基于原型的语言(如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;
})();
如果你有信心使用CoffeeScript,它有可靠的类方法,并且与任何其他OOP框架相比,它提供了更清晰的语法。
相关文章:
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 使用查询字符串方法清除浏览器缓存
- 有没有一种方法可以使用任何浏览器扩展整个dom树'的开发工具
- javascript Ajax方法在不同的浏览器中有不同的结果
- 有没有任何方法可以将javascript对象从源代码传递到系统/浏览器剪贴板
- 有没有一种方法可以在过滤掉iOS Chrome、Firefox和其他浏览器的同时检测iOS safari
- 如何在jQuery.CSS()方法中为所有浏览器编写CSS代码
- 检查浏览器是否支持iFrame上的加载方法
- 对象在谷歌浏览器中没有方法“焦点”
- 什么是创建 JavaScript 类的适当、现代和跨浏览器安全的方法
- 在 JavaScript 中识别浏览器选项卡的任何方法
- Javascript 错误:对象在 IE 浏览器中不支持此属性或方法
- IPAD safari 浏览器不支持 window.open JavaScript 方法
- JavaScript 和 NPAPI 使用相同的方法名称,但在 Android 浏览器上获得不同的标识符
- 在拖动之前清除内容选择的跨浏览器方法
- 是否有任何跨浏览器方法可以获取带有滚动条的 DIV 宽度(如果存在)
- 用于捕获滚动事件的跨浏览器方法(或暂时禁用滚动的更简单方法)
- 跨浏览器方法,用于防止从文本区域复制所有文本的方法
- IE 9浏览器方法setExpression
- 跨浏览器方法,以确定所选的锚标记是否会导致文本区域模糊