原型复习笔记

原型复习笔记

1.实例对象的原型 __proto__ 和构造函数的原型prototype指向是相同的
2.实例对象中的__proto__ 原型指向的是构造函数中的原型prototype
  原型对象中的constructor指向构造函数   (Person(){})
3.实例对象可访问原型对象中的属性和方法
		实例中的__proto__ 是原型,浏览器使用的
		构造函数中的prototype是原型,是程序员使用的
		prototype的__proto__指向的是Object的prototype
		Object.prototype的__proto__指向的是null
4.原型指向可以改变
		实例对象的原型__proto__ 指向的是该对象所在的构造函数的原型对象
		构造函数的原型对象(prototype)指向如果改变了,实例对象的原型(__proto__)指向也会发生改变
		实例对象和原型对象之间的关系是通过__proto__原型来联系起来的,这个关系就是原型链

function Person(name) {
  this.name = name;
}

Person.prototype.sayHi = function () {
  console.log('hello');
}
var xiaomin = new Person('小明');
console.log(xiaomin.name)
xiaomin.sayHi();
console.dir(Person);
console.dir(xiaomin)
console.dir(xiaomin.__proto__ == Person.prototype)

组合继承

组合继承,有时候也叫伪经典继承,指的是将原型链和借用构造函数的技术组合到一块,从而发挥二者之长的一种继承模式,其背后的思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承,这样既通过在原型上定义方法实现了函数复用,又能够保证每个实例都有他自己的属性

function SuperType(name) {
  this.name=name;
  this.colors=['red','blue','green'];
}
SuperType.prototype.sayName=function () {
  console.log(this.name)
}

function SubType(name,age) {
    //继承属性
  SuperType.call(this,name);
  this.age=age;
}

//继承方法
SubType.prototype=new SuperType();
SubType.prototype.constructor=SubType;
SubType.prototype.sayAge=function () {
  console.log(this.age)
};

var instance1=new SubType('小明',29);
instance1.colors.push('black');
console.log(instance1.colors);
instance1.sayName();
instance1.sayAge();

var instance2=new SubType('小红',39);
console.log(instance2.colors);
instance2.sayName();
instance2.sayAge();

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值