前端小白备战实习面试day2——js的原型链

2.js的原型原型链

我们创建的每个函数都有一个prototype(原型)属性。该属性是一个指针指向一个对象,这个对象的用途是包含特定类型的所有实例共享的属性和方法。换句话说不必在构造函数中定义对象实例的信息,可以将这些信息直接添加到原型对象中。
function Person(){ Person.prototype.name="Nicholas"; Person.prototype.age=29; Person.prototype.job="Software"; Person.prototype.sayName=function(){ alert(this.name); } } var peson1=new Person(); peson1.sayName(); var peson2=new Person(); peson2.sayName();
如上例所示,我们将sayName()方法和所有属性都直接添加到了Person的prototype属性中,构造函数变成了空函数。依旧可以通过构造函数来创建新对象,新对象们具有相同的属性和方法。

只要创建了一个新函数,就会为该函数创建一个prototype属性,这个属性始终指向函数的原型对象,所有原型对象都会有一个constructor属性,拿前面的例子看,Person.prototype.constructor指向Person。在实例和原型之间存在着一种联系,即实例内部包含一个指针**[[Prototype]]**,该指针指向构造函数的原型对象。即构造函数Person的原型为Person.prototype(其中包含了许多属性及方法);而Person.prototype的构造函数Constructor是Person,而实例person1和person2的[[prototype]]内部属性指针指向Person.prototype。图见js第148页。(注意:构造函数Person和两个实例均不包含属性和方法)

虽然所有的实现方式都无法访问到[[Prototype]],但可以通过isPrototypeOf()方法来确定实例的原型是否都是它
Person.prototype.isPrototypeOf(person1)
当代码读取某个对象的某个属性时,都会执行一次搜索,搜索首先从对象实例本身开始,如果在实例中找到了具体给定名字的属性,则返回该属性的值。如果没有找到,则继续搜索指针指向的原型对象,在原型对象中查找具有给定名字的属性。
使用hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中。该方法只在给定属性存在于对象实例中时,才会返回true。

function Person(){
}
Person.prototype.name="Nicholas";
Person.prototype.age=29;
var person1=new Person();
person1.name="aaa";
person1.hasOwnProperty("name");//返回为true
person1.hasOwnProperty("age");//返回为false

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值