//原型式继承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 bookconsole.log(newBook.alikeBook); //undefinedconsole.log(book.name); //js booksconsole.log(book.alikeBook); //['css book', 'html book']想问一下,问什么newBook.alikeBook是undefined?
1 回答
慕的地10843
TA贡献1785条经验 获得超8个赞
按照楼上的方法,可以使你的代码实现预期的功能。我这里解释下为什么你这么写不能得到预期的效果。
这里需要说下new操作符的一个执行流程
1.创建一个object
instance = new Object();
2.设置原型链
instance.__proto__ = F.prototype;
3.将上下文this指向instance,执行函数体
F.apply(instance, arguments);
4.返回值
所以,可以看到,设置原型链的操作是在第二步的时候的执行的,而这个时候,你代码里面的F.prototype = o
还没有执行,所以instance.__proto__只会被赋值undefined,自然就没有达到继承的效果
添加回答
举报
0/150
提交
取消