(所谓“五节点原型链”,即 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方法没有继承过来...
到底是什么原因呢?
相关分类