【发布时间】:2010-12-06 03:44:36
【问题描述】:
在编写面向对象脚本时,每种类型/方法的优缺点是什么?
就我个人而言,我发现闭包(函数式?方法)是一种更自然地封装状态的方法,也许更优雅。然而,我听说在 JavaScript 实现中使用闭包的速度较慢。
我至少想知道原型方法在哪里最合适。
【问题讨论】:
标签: javascript oop
在编写面向对象脚本时,每种类型/方法的优缺点是什么?
就我个人而言,我发现闭包(函数式?方法)是一种更自然地封装状态的方法,也许更优雅。然而,我听说在 JavaScript 实现中使用闭包的速度较慢。
我至少想知道原型方法在哪里最合适。
【问题讨论】:
标签: javascript oop
“功能”风格(大多数人会称之为“传统 OOP”):
原型风格:
因此,如果性能对您来说不是一个大问题,并且您只熟悉传统的 OOP……那就去试试吧(来自 APress 的 Pro Javascript Design Patterns 对此有很好的模式)。但是,如果性能很重要,或者您担心额外的抽象层会使调试复杂化,请花时间阅读原型继承的工作原理;你会成为一个更好的 Javascript 程序员。
附:如果您担心原型风格没有真正的“私有”方法,我强烈建议您阅读: http://snook.ca/archives/javascript/no-love-for-module-pattern 它很好地解释了为什么真正的“私有”成员实际上是一件坏事(至少在大多数 JS 开发环境中)。
【讨论】:
使用原型来指示对象继承。使用功能代码复制它非常复杂(我假设您的意思是在闭包中拥有私有成员并返回包含您的公共成员的对象的模式?)
function Animal() { }
function Cat () { }
Animal.prototype.sleep = function() { /* blah */ };
Cat.prototype = new Animal;
Cat.prototype.meow = function() { /* blah */ };
var simon = new Cat();
simon.sleep();
simon.meow();
【讨论】: