【发布时间】:2011-03-24 14:28:44
【问题描述】:
我了解在构造函数中分配为“this”属性的方法的目的是使它们具有特权,因为它们可以访问私有属性和方法,如下所示:
var Book = function(newFirst, newLast){
//private attributes
var author_first = newFirst;
var author_last = newLast;
//public attributes
this.puAuthor_first = newFirst;
this.puAuthor_last = newLast;
//public privileged methods (accessing private attributes)
this.getAuthor = function() {
return author_first + author_last;
}
}
但是从 Book 继承的对象与分配给原型对象的方法相比有什么区别:
Book.prototype.nonPrivilegedGetAuthor = function() {
return this.puAuthor_first + this.puAuthor_last;
}
?
所以我的问题有两个:
1) 当这个对象通过原型继承继承时,getAuthor() 和 nonPrivilegedGetAuthor() 都会被继承,对吧?这个想法是 getAuthor() 将被复制到新对象,而 nonPrivilegedGetAuthor() 将通过原型链获得,好处是不被复制,对吧?除了无法访问私人会员之外,还有哪些成本?
2) 古典继承呢?具体来说,分配为原型对象属性的公共非特权方法会被继承吗?我应该注意什么?在继承时不做更多的事情,你基本上会在原型链中出现一个跳过一个对象的间隙,对吗?我们必须将子对象的原型链连接到 Book——我们如何做到这一点?我们该怎么做才能正确继承,如果不这样做会发生什么陷阱?
【问题讨论】:
-
1) Javascript 中没有继承之类的东西 2) Javascript 中没有 public 和 private 之类的东西 3) nonPrivilegedGetAuthor 将有权访问对象属性,因为它是您需要的对象的方法阅读原型,但它基本上是一个用于解析方法范围的对象链。 getAuthor 和 nonPrivilegedGetAuthor 在范围方面几乎没有区别。
-
我想我得问一个更简单的问题,因为我没有答案可以接受。我会做你的建议。
标签: javascript inheritance prototype