这个内容深入了解下去感觉会讲很久。还是快刀斩乱麻吧。小论 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 一个很重要的知识点就解决了。
其实如果你能把代码当成一段段结构找到规律和相仿性,实际上不用了解这些也可以写,就好比数学家不学基本语法,都可以写出很深的代码,但不纠结可读性问题。
全剧终...