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'));

关注我

我的微信公众号:前端开发博客,在后台回复以下关键字可以获取资源。

  • 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF
  • 回复「Vue脑图」获取 Vue 相关脑图
  • 回复「思维图」获取 JavaScript 相关思维图
  • 回复「简历」获取简历制作建议
  • 回复「简历模板」获取精选的简历模板
  • 回复「加群」进入500人前端精英群
  • 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。
  • 回复「知识点」下载高清JavaScript知识点图谱

每日分享有用的前端开发知识,加我微信:caibaojian89 交流