首页 > 编程语言 > 详细

javascript中的原型和原型链

时间:2016-03-20 21:29:35      阅读:293      评论:0      收藏:0      [点我收藏+]

原型:一个对象就是一个属性的集合,并且拥有一个独立的prototype原型对象,是以内部的[[prototype]]引用这的。

更加确切的说一个对象的原型就是它的构造函数prototype的值

所以的构造函数都有一个prototype值,在构造函数被创建之初就创建了,原型对象也是一个对象,默认就有一个里面有一个属性constructor指向构造函数,所以这也是对象为什么会有constructor属性的原型,我们来看一下代码

function Person(name,age){
  this.name=name;
  this.age=age;
 }
Person.prototype.infor=function(){
  console.log(this.name+this.age);  
}
var p1=new Person("小明",14);
p1.infor();
console.log(p1.__proto__==Person.prototype);//true
console.log(Person.constructor);//Function
console.log(p1.constructor);//Person

这里就引出一个方法Object.hasOwnProperty()用于检测是自己的属性还是从原型上继承来的

function Person(name,age){
  this.name=name;
  this.age=age;
 }
Person.prototype.infor=function(){
  console.log(this.name+this.age);  
}
var p1=new Person("小明",14);
console.log(p1.hasOwnProperty("name"));//true
console.log(p1.hasOwnProperty("infor"));//false

每一个通过构造函数实例化的对象,都有具有原型的属性。所以当你的实例要找某个属性的时候会从自身开始寻找,若是没有就会到相应的原型中进行寻找。但是若是新对象想要定义一个自己没有的属性,且构造函数的原型中有的话,那么这个属性会被定义在自己的属性中不会影响其构造函数的原型

function Person(name,age){
  this.name=name;
  this.age=age;
 }
Person.prototype.infor=function(){
  console.log(this.name+this.age);  
}
var p1=new Person("小明",14);
//构建新属性
p1.number="2014";
//新方法 p1.num
=function(){ console.log("this is my number:"+number); } console.log(p1.hasOwnProperty("number"));//true console.log(p1.hasOwnProperty("num"));//true

原型链:一个用来实现继承和共享属性的有限对象链。

由各级对象的__proto__属性逐级继承,形成的链式结构,就叫原型链。既然讲到原型链我们就会讲到继承,来看一下原型之间是如何继承的

1.设置两个对象之间的继承

子对象.__proto__=父对象,但是内置属性一般不能用。我们通过 Object.setPrototpyeOf(子对象和父对象)

2.继承原型

function Person(name,age){
  this.name=name;
  this.age=age;
 }
Person.prototype.infor=function(){
  console.log(this.name+this.age);  
}
function Animal(name,age,color){
    Person.apply(this,arguments);
    this.color=color;
}
Object.setPrototypeOf(Animal.prototype,Person.prototype);
var n1=new Animal("豆豆",5,"black");
console.log(n1.hasOwnProperty("color"));//true
console.log(n1.hasOwnProperty("name"));//true
console.log(n1.name);//豆豆

3.两个构造函数之间原型对象之间的继承

 

javascript中的原型和原型链

原文:http://www.cnblogs.com/chen-q/p/5299506.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!