javascript学习15:原型属性prototype

我们创建的每个函数都有一个prototype(原型)属性。这个属性是一个对象,它的作用是包含可以有特定类型的所有实例共享的属性和方法。

function Box(){} //构造函数体内什么都没有,这里如果有,叫做实例属性,实例方法
Box.prototype.name = 'cai';
Box.prototype.age = 22;
Box.prototype.run = function(){
	return this.name +" is "+ this.age;
}
var box1 = new Box(); //实例化
var box2 = new Box(); //实例化
document.write(box1.run() == box2.run()); //true
document.write("<br/>"+box1.__proto__+"<br/>"); //这是一个指针,只想prototype对象,它的作用是指向.[object Object]
document.write(box1.constructor); //构造函数,可以获取构造函数本身 .function Box(){}

判断一个对象实例(对象引用)是不是指向原型对象,基本上,只要实例化了,它自动指向的。

document.write("<br/>"+Box.prototype.isPrototypeOf(box1)); //true

原型模式的执行流程

1.先查找构造函数实例里的属性和方法,如果有,立即返回。

2.如果构造函数实例里没有,则去它的原型对象里找,如果有,就返回

box1.name = 'jack'; //实例属性,并没有重写原型属性
document.write("<br/>"+box1.name); //就近原则,jack
delete box1.name; //删除实例中的原型
document.write("<br/>"+box1.name); //cai

判断实例中是否存在指定属性

box2.name = 'baojian';
document.write("<br/>"+box2.hasOwnProperty('name')); //判断实例中是否存在指定属性 true

in 操作符会在通过对象能够访问给定属性时返回true,无论实例属性还是原型属性。只有有就返回true,两边都没有就返回false。

//判断只有原型中有属性
function isProperty(object, property){
	return !object.hasOwnProperty(property) && (property in object)
}
alert(isProperty(box1,'name'));
原文链接:javascript学习15:原型属性prototype 版权所有,转载时请注明出处,违者必究。
注明出处格式:前端开发博客 (http://caibaojian.com/js-function-prototype.html)

发表评论

请登录后发表评论: