码迷,mamicode.com
首页 > 编程语言 > 详细

javascript原型链继承

时间:2018-07-03 11:50:52      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:obj   停止   prototype   def   eof   fun   code   定义   原型   

当定义一个函数的时候,函数对象就会默认带一个prototype对象属性。

通过new去构造一个对象(obj),它的原型会指向构造器的prototype属性(foo.prototype)。

function foo(){
}
foo.prototype.z = 3;
var obj = new foo();
obj.x = 1;
obj.y = 2;
console.log(obj.x,obj.y,obj.z); //1,2,3
//虽然在obj对象上没有定义toString属性
//但在原型链Object.prototype上定义
console.log(typeof obj.toString) //function

 

当我们去访问obj.x和obj.y的时候,发现这个对象上有有x属性和y属性,所以返回值为1和2。当访问obj.z时发现对象上没有这个属性,js并不会停止查找,而是会查找它的原型(foo.prototype)。在它的原型上发现有z属性,所以返回值为3。

用函数对象默认的prototype对象也是有原型的,它的原型为Object.prototype。而Object.prototype的原型则是null。

总结:当在一个对象上没有找到属性,js就会通过原型链向上去查找,一直找到null如果还没有找到的话,就返回undefined

function foo(){
}
foo.prototype.z = 3;
var obj = new foo();
obj.z = 5;
console.log(obj.z,foo.prototype.z); //5,3

由于在obj上可以查到属性z,就会直接返回,而不会向上查找

javascript原型链继承

标签:obj   停止   prototype   def   eof   fun   code   定义   原型   

原文地址:https://www.cnblogs.com/yaotome/p/9256822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!