前言
我会尽我所能清晰的描述实例对象?对象原型?原型对象?原型对象构造函数?的脉络。
1 初始---引入构造函数
1.1 系统自带的构造函数 Object
大家都知道在JavaScript中 使用var obj = new Object 就可以创造一个空对象,这时候可以对比一下 用构造函数创建对象
function Hero(unamy, utype, uhp) { this.name = unamy; this.type = utype; this.hp = uhp; this.attack = function(uttack) { console.log(uttack); } } var lp = new Hero('廉颇', '力量型', '500');
发现两者构造及其相似,其实在JavaScript内置了Object构造函数。
1.2 自己创建的构造函数
function Star(uname, age) { this.uname = uname; this.age = age; } Star.prototype.sing = function() { console.log('我会唱歌'); } var ldh = new Star('刘德华', 18); var zxy = new Star('张学友', 19);
2 了解一些基础知识
2.1 所有对象自带的一些东西
1 在JavaScript中对象内必定带有(__proto__)对象原型这个属性,该对象原型里面存储的是一个指向原型对象(prototype)的地址。
2 原型对象也是个对象 所以它必定带有(__proto__)对象原型这个属性。
2.2 原型对象prototype内自带的一些东西
1 原型对象prototype自带一个constructor属性该属性存放的是构造函数的地址指向构造函数
2 原型对象是 constructor属性指向函数 的属性
3 关系图
先有构造函数,用构造函数进行实例化一个对象(ldh),这个对象内有对象原型__proto__指向该构造函数内的的原型对象(prototyp),原型对象内的constructor属性指向star构造函数.
4 原型链
ldh的对象原型(__proto__)指向Star的原型对象 (ptototype),原型对象 (ptototype)的对象原型(__proto__)指向系统对象构造函数Object的原型对象(prototype),Object的原型对象(prototype)内的对象原型(__proto__)指向顶层NULL,这就是原型链。
5 JavaScript对象的成员查找机制
①当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
②如果没有就查找它的原型必也就是_ proto_ 指向的prototype原型对象)。
③如果还没有就查找原型对象的原型( Object的原型对象)。
④依此类推一直找到Object为止( null )。
⑤_ proto_ 对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。