方式一:
function inherit(p) {
if (p == null) {
throw TypeError();
}
var t = typeof p;
if(t!=="object" && t!=="function"){
throw TypeError();
}
var o = {};
for(var prop in p){
o[prop]=p[prop];
}
return o;
}
方式二:
function inherit(p) {
if( t===null){
throw TypeError();
}
var t = typeof p;
if(t!=="object" && t!== "function"){
throw TypeError();
}
var f = function(){};
f.prototype=p;
return new f();
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
简而言之,区别就是:
1是
复制属性2是
共享属性而且1中的复制只是复制了可枚举属性。读一下ES规范就会发现:原型这种东西就是为了共享属性而设计的。
再多说一句:
代码@小_秦写的很多了,他的代码正是体现了两者的区别,赞一个。
第1段代码应该返回对象o
2段代码都能实现从p对象继承属性及方法,但是有些差别
这个差别就在于
for(var prop in p){的使用,其只能取出p对象中可枚举的属性,而f.prototype=p;就没有这个问题例如
方法1只是逻辑上的原型继承,其实没有用到js的原型链机制