猿问

JS面向对象编程:构造“五节点原型链”失败,why?

(所谓“五节点原型链”,即 n(1-实例)--N.prototype(2-第二层原型对象)--M.prototype(3-第一层原型对象)--Object.prototype(4-根构造函数原型对象)--null(5-馕))


根据《廖雪峰javascript教程》-面向对象编程-原型继承 的内容,我在尝试用代码来验证,

很不幸,没能成功。是不是廖老师这里的解释有误??


话不多说,贴代码! ↓↓


/**

 * 想构造一个“5节点原型链”: n(实例)--Nnn.prototype(第二层)-- Mmm.prototype(第一层)-- Object.prototype -- null

 */

//构造函数 Mmm(第一层)

function Mmm(){

    this.name = 'MMM';

    this.age = 18;

    this.do = function(){console.log("DO!!");}

}


var mmm = new Mmm();

mmm.do(); //输出 DO!! [第一层,没问题] 


//构造函数 Nnn(第二层) 它的原型对象是Mmm

function Nnn(){

    this.nnname = 'NNN';//仅增添一个属性

}


//开始按照廖雪峰老师的思路(参见《廖雪峰javascript教程》面向对象编程-原型继承)

/**

 * STEP1   先建立空函数F

 * STEP2   F.prototype指向第一层prototypa

 * STEP3   再把第二层prototype指向new F() 

 * STEP4   最后“修复”第二层原型对象的构造函数属性为第二层构造函数本身

 * (虽然我到现在没搞懂 最后为什么要“修正”。。。)

 */

function F(){}


F.prototype = Mmm.prototype;

Nnn.prototype = new F();

Nnn.prototype.constructor = Nnn;


//然鹅,并没有什么X用。

var nnn= new Nnn();

nnn.do();//报错!!。。。do方法没有继承过来...

到底是什么原因呢?


达令说
浏览 394回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答