原型继承的坑

时间:2021-11-21 19:29:15
//原型式继承
function inheritObject(o) {
//声明一个过渡函数对象
function F() {
//过渡对象的原型继承父对象
F.prototype = o;
}
//返回过渡对象的一个实例,该实例的原型继承了夫对象
return new F();
}

//测试

let book = {
name: 'js books',
alikeBook: ['css book', 'html book']
};

let newBook = inheritObject(book);
newBook.name = 'ajax book';
// newBook.alikeBook.push('xml book');

console.log(newBook.name); //ajax book
console.log(newBook.alikeBook); //undefined

console.log(book.name); //js books
console.log(book.alikeBook); //['css book', 'html book']

1.创建一个object
instance = new Object();
2.设置原型链
instance.__proto__ = F.prototype;
3.将上下文this指向instance,执行函数体
F.apply(instance, arguments);
4.返回值

所以,可以看到,设置原型链的操作是在第二步的时候的执行的,而这个时候,你代码里面的F.prototype = o还没有执行,所以instance.__proto__只会被赋值undefined,自然就没有达到继承的效果

函数未执行 ,没有进行F.prototype = o 的操作;