为了账号安全,请及时绑定邮箱和手机立即绑定

js原型式继承问题

js原型式继承问题

jeck猫 2018-11-28 22:18:10
//原型式继承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,自然就没有达到继承的效果


查看完整回答
反对 回复 2018-12-24
  • 1 回答
  • 0 关注
  • 448 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信