JS面向对象程序设计--原型

一、原型对象

JS中,函数都有原型,名称叫prototype。在面向对象中,构造函数也不例外。

prototype的类型是object,也是对象,所以原型也叫原型对象。

function Person(){
};
console.log(Person.prototype); //object

// 实例的__proto__指针
var p1 = new Person(); // __proto__指向Person.prototype
var p2 = new Person();// __proto__指向Person.prototype

//isPrototype判断属于哪一个原型对象
Person.prototype.isPrototypeOf(p1); // true
Person.prototype.isPrototypeOf(p2); // true

//constructor
console.log(p1.constructor); // function a(){}
console.log(Person.prototype.constructor); // function a(){}

__proto__指针:类实例化之后的对象中有一个__proto__指针,这个指针指向原型对象。

isPrototypeOf():判断是否为某一个原型对象。如Person.prototype.isPrototypeOf(p1); // true

constructor:实例中的constructor指向构造函数,原型中的constructor指向构造函数;

二、原型属性与自有属性

function Person(){
};

Person.prototype.name="张三";
var p1 = new Person(); 
var p2 = new Person();
p1.name="李四"; // 自有属性,覆盖原型属性 
console.log(p1.name); //李四
console.log(p2.name); // 张三
p1.hasOwnProperty('name'); //true
p2.hasOwnProperty('name'); //false

实例可以覆盖自有属性,判断是否自有属性使用hasOwnProperty

三、in操作符与for....in、Object.keys()

in操作符:key in object //返回boolean,包含自有属性与prototype属性;

for...in:枚举对象中的属性,包含自有属性与prototype属性;

Object.keys返回客枚举的字符串数组;

四、原型重写

原型重写指的是直接修改prototype的指向,指向新的对象。

原型重写之后,constructor指向必须重新指向构造函数。

五、原型的动态性

原型可随时增加新属性、新方法,并且变更可以在实例中体现出来,而不需要重新新建实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值