在他关于javascript inheritance的站点文章中,Harry Fuecks解释了一种实现继承的方法如下:
function copyPrototype(descendant, parent) {
var sConstructor = parent.toString();
var aMatch = sConstructor.match( /\s*function (.*)\(/ );
if ( aMatch != null ) { descendant.prototype[aMatch[1]] = parent; }
for (var m in parent.prototype) {
descendant.prototype[m] = parent.prototype[m];
}
};
虽然我理解他的代码,但我想到了一个问题 - 为什么不删除for循环并简单地执行此操作:
function copyPrototype(descendant, parent) {
var sConstructor = parent.toString();
var aMatch = sConstructor.match( /\s*function (.*)\(/ );
if ( aMatch != null ) { descendant.prototype[aMatch[1]] = parent; }
descendant.prototype = parent.prototype;
};
感谢。
答案 0 :(得分:3)
将prototype
个function
分配给另一个prototype
只会分配对原始prototype
的引用;两者都将共享相同的 prototype
对象。迭代{{1}}会创建其所有成员的浅表副本。