编写面向对象脚本时每种类型/方法的优缺点是什么?
就个人而言,我发现闭包(功能性方法)是一种将状态封装得更自然,也许更优雅的方式.但是,我听说在JavaScript实现中这种闭包的使用速度较慢.
我至少想知道原型方法最合适的地方.
mac*_*ost 14
"功能"风格(大多数人称之为"传统OOP"):
原型风格:
因此,如果性能对您来说不是一个大问题,并且您只熟悉传统的OOP ...那就去吧(来自APress的Pro Javascript Design Patterns,有一个很好的模式).但是,如果性能很重要或者您担心额外的抽象层会使调试复杂化,请花点时间阅读原型继承的工作原理; 你会成为一个更好的Javascript程序员.
PS如果你担心没有真正的"私人"方法与原型风格,我强烈建议阅读: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();
Run Code Online (Sandbox Code Playgroud)