js原型链

来源:互联网 发布:天猫淘宝内部优惠券 编辑:程序博客网 时间:2024/04/29 14:57
<!DOCTYPE html><html><head><title>js原型链</title><script type="text/javascript">var a = function(){this.name = "普通对象的名称a";};a.prototype.name = "原型对象的名称a";var a1= new a();console.info(a.prototype);//a对象函数的原型对象打印出来是Objectconsole.info(a);console.info(Object.prototype);var b = function(){this.name = "普通对象的名称b";this.id = "b";}b.prototype.name = "原型对象的名称b";b.prototype.id = "b-prototype";/* * 普通对象最普通的对象:有__proto__属性(指向其原型链),没有prototype属性。原型对象(person.prototype 原型对象还有constructor属性(指向构造函数对象))函数对象:凡是通过new Function()创建的都是函数对象。                          拥有__proto__、prototype属性(指向原型对象)。                          Function、Object、Array、Date、String、自定义函数                          特例: Function.prototype(是原型对象,却是函数对象,)                          var o1 = {}; var o2 =new Object();var o3 = new f1();function f1(){}; var f2 = function(){};var f3 = new Function('str','console.log(str)');console.log(typeof Object); //function console.log(typeof Function); //function  console.log(typeof f1); //function console.log(typeof f2); //function console.log(typeof f3); //function   console.log(typeof o1); //object console.log(typeof o2); //object console.log(typeof o3); //object作者:Yi罐可乐链接:http://www.jianshu.com/p/dee9f8b14771來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 *  */a.prototype = new b();//另b的一个对象实例等于a对象函数的原型对象(即a的原型对象指向b的一个普通的实例对象),及原型链//([proto]属性是JavaScript内部维护的,外部是不可访问的,由这个属性所维护的原型链为内部原型链,与由prototype和constructor维护的外部原型链)//如下//注意:每个实例都是原型对象的复制,当查找属性时,现在当前对象下选择,找不到会找到原型对象,原型对象找不到会继续到内部链 的_proto_中找,一直找到object中//a.prototype=>b的一个实例,,b的实例指向b的原型,然后b的原型指向object的原型,依次内推。console.info(a.prototype.__proto__.__proto__.toString());console.info("--------分割线----------------");console.info(new a().name);//找属性时,先找当前对象中找,找不到然后到原型中找。//普通对象的名称aconsole.info(a.prototype.name);//由于a的原型链指向了b的一个对象实例,所以输出的为“普通对象的名称b”console.info(a.prototype.id);//由于a的原型链指向了b的一个对象实例,所以输出的为“b”console.info(new a().id);//由于a的原型链指向了b的一个对象实例,所以普通对象输出的跟原型对象的一致为b</script></head><body></body></html>

原创粉丝点击