我刚学会了Javascript中的原型(不是框架,原生功能)。我完全得到了,至少有一个用途。例如:
Array.prototype.myMethod = function(){
/*do something super awesome*/
}
var a = [];
a.myMethod();
阅读我的一个例子,作者在 对象 对象中添加 subClass 方法,通过这样做:
Object.subClass = function(hash){/*return an extended object that inherits Object's attributes*/}
目标是创建一个类似于面向对象的语言语法的方法。 由于我期望书籍作者使用原型特征来定义这样的方法,我的问题是:
答案 0 :(得分:3)
为什么不使用原型?
因为如果使用原型,那么subClass
方法仅适用于Object
的实例。例如,要调用subClass
,必须执行以下操作:
Object.prototype.subClass = function(hash) { /* return an extended object that inherits Object's attributes */ };
function MyClass() { };
var myInstance = new MyClass();
var mySubClassInstance = myInstance.subClass(); // only accessible on instances
这并没有多大意义,因为作者希望subClass
返回对象的扩展实例。目的不是创建父"类"的实例。然后从该实例返回一个新的子实例。这是不必要的。
通过在Object
上正确定义,可以在不首先创建subClass
的实例的情况下创建MyClass
实例:
Object.subClass = function(hash) { /* return an extended object that inherits Object's attributes */ };
function MyClass() { };
var mySubClassInstance = MyClass.subClass();
将方法直接添加到对象而不是附加到它的原型上会有更大的风险吗? 是否存在我更喜欢单向另一种方式的情况。
答案 1 :(得分:1)
如果您希望方法能够访问类实例(使用this
关键字),请使用原型。如果您不需要this
,请将函数声明为类本身的成员,以便您可以在没有对象的情况下调用它。