js原型式继承问题

//原型式继承

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']

想问一下,问什么newBook.alikeBookundefined

jeck猫
浏览 451回答 1
1回答

慕的地10843

按照楼上的方法,可以使你的代码实现预期的功能。我这里解释下为什么你这么写不能得到预期的效果。这里需要说下new操作符的一个执行流程1.创建一个objectinstance = new Object();2.设置原型链instance.__proto__ = F.prototype;3.将上下文this指向instance,执行函数体F.apply(instance, arguments);4.返回值所以,可以看到,设置原型链的操作是在第二步的时候的执行的,而这个时候,你代码里面的F.prototype = o还没有执行,所以instance.__proto__只会被赋值undefined,自然就没有达到继承的效果
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript