繁体   English   中英

Javascript:Object或Object.prototype?

[英]Javascript: Object or Object.prototype?

我只是学习了Java语言中的原型(不是框架,而是本机功能)。 我完全理解了,至少使用了其中一种。 例:

Array.prototype.myMethod = function(){
   /*do something super awesome*/
}
var a = [];
a.myMethod();

在继续阅读时,我看到了一个示例,其中作者通过执行以下操作向Object对象添加了subClass方法:

Object.subClass = function(hash){/*return an extended object that inherits Object's attributes*/}

目标是创建一种类似于面向对象的语言语法的方法。 由于我希望本书的作者使用原型功能定义这种方法,因此我的问题是:

  • 为什么不使用原型
  • 将方法直接添加到对象而不是附加到对象的原型是否更具风险?
  • 在某些情况下,我更喜欢一种方法

为什么不使用原型?

因为如果使用了原型,则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正确定义它,无需先创建MyClass实例即可创建subClass实例:

Object.subClass = function(hash) { /* return an extended object that inherits Object's attributes */ };
function MyClass() { };

var mySubClassInstance = MyClass.subClass();

将方法直接添加到对象而不是附加到对象的原型是否更具风险? 在某些情况下,我更喜欢一种方法。

  • 添加到原型以将成员添加到该对象的实例。
  • 添加到对象以向该对象添加成员(类似于静态成员的想法)。

如果希望方法能够访问类实例(使用this关键字),请使用prototype。 如果不需要this ,则将function声明为类本身的成员,以便您可以在没有对象的情况下调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM