继续原型链

这个内容深入了解下去感觉会讲很久。还是快刀斩乱麻吧。小论 JS 原型链 (一)

//由new Function()产生的对象都是函数对象 短回顾
console.log(typeof Object.prototype)//object
console.log(typeof Function.prototype)//function
console.log(typeof Function.prototype.prototype)//undefined

var hero =function () {
    hero.prototype.name ="花千骨";//原型对象name ,原型属性:花千骨
    hero.prototype.sex ="gril";
    hero.prototype.age ="Ghosts kown"
    hero.prototype.Hp =100;
    hero.prototype.say =function () {
        return "子画,我要吃糖醋排骨"
    }
}
var xiaogu =new hero();//小骨是英雄函数的实例化对象
var wonder_woman =new hero();//神奇女侠是英雄函数的实例化对象
wonder_woman.name ="神奇女侠";//修改实例对象内容
xiaogu.__proto__.name ="花万骨";//_proto__等价prototype 修改原型属性
xiaogu.__proto__.age =20

console.log("hero name:%s",xiaogu.name,xiaogu.age,typeof(xiaogu))
console.log("hero name:%s",wonder_woman.name)

var xiaogu =new hero();通过内部的指针proto,指向原型对象 hero.prototype.name,原型对象指向构造器的构造函数的 hero,构造器用来实例化对象的。
wonder_woman 是 hero 的实例化对象,wonder_woman.name ="神奇女侠";,hero.prototype.name ="花千骨",神奇女侠覆盖了花千骨的原型属性。

var pt =hero.prototype.isPrototypeOf(xiaogu,wonder_woman)
console.log(pt) //true 如果挂不存在的会抛错

使用 isPrototypeOf() 方法可以判断检查的多个对象是否挂在 Function.prototype 的原型链上。了解了这个以后,在看看原型链的一个继承关系。

function Hero(){
    this.type = "NordicHero";
}
Hero.prototype.getType = function(){
    return this.type;
}
var hero =new Hero();//hero对象是实例化构造函数Hero
console.log(hero) //Hero { type: 'NordicHero' } 这样更好理解了 返回的是1个object
console.log(hero.type)//NordicHero

function NordicHero(){//北欧神话
    this.name = "yadianna"; //原型对象name属性雅典娜
}
NordicHero.prototype = new Hero();//北欧英雄构造对象是Hero的实例,继承于Hero
console.log(NordicHero.prototype.type)//NordicHero

NordicHero.prototype.getName = function(){
    return this.name;
}
var yadianna =new NordicHero();//
console.log(yadianna.__proto__)//Hero { type: 'NordicHero', getName: [Function] }
console.log(yadianna.__proto__===NordicHero.prototype)//True

实例化对象但是因为 NordicHero 继承于 Hero,js adianna.__proto__结果console.log(yadianna.__proto__)
北欧英雄的实例化对象雅典娜继承于北欧英雄,北欧英雄的原型对象 name 的属性是雅典娜。北欧英雄继承于英雄。好吧,我自己都觉得绕,但实际就是这样的,这块如果了解了,JS 一个很重要的知识点就解决了。

其实如果你能把代码当成一段段结构找到规律和相仿性,实际上不用了解这些也可以写,就好比数学家不学基本语法,都可以写出很深的代码,但不纠结可读性问题。

全剧终...


↙↙↙阅读原文可查看相关链接,并与作者交流