1.原型
是function对象的一个属性prototype,定义了构造函数制作出对象的公共祖先
Preson.prototype =
作用:提取共有属性
Preson.prototype.surname='张'
function Preson(name) {
this.name = name
}
let p = new Preson('三')
let p1 = new Preson('四')
p.surname == p1.surname
p.name == '三'
p1.name == '四'
构造函数constructor 可修改
Preson.prototype.surname='张'
function Preson(name) {
this.name = name
}
let p = new Preson('三')
console.log(p.constructor) //Preson()
Preson.prototype.constructor = function Tool(){}
console.log(p.constructor) //Tool()
对象的 __proto__ 可修改
Preson.prototype.surname='张'
function Preson() {
/* new时隐式调用
let this = {
__proto__:Preson.prototype
}
*/
}
let p = new Preson()
console.log(p.surname) //张
p.__proto__ = {surname:'李'}
console.log(p.surname) //李
可以Object.create(原型|null)创建对象
2.原型链
当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,如果还没有找到就会再在构造函数的prototype的__proto__中查找这样一层一层向上查找就会形成一个链式结构,我们称为原型链 A instanceof B 判断A对象的原型上有没有B的原型 原型链中的方法this指向触发事件执行的对象
3.继承
1.原型链继承
原型链上属性共享
2.构造函数继承
有私有属性 只能继承父类的实例属性和方法 需要额外调用一次函数影响性能
function Preson( name ) {
this.name = name
}
function Son( name,age ) {
Preson.call(this,age)
this.name = name
}
- 圣杯模式 有私有属性 可以继承选择继承对象的所有方法
const inherit = (function(){
let F =function (){} ;//私有化
return function(Target,Origin){
F.prototype = Origin.prototype;
Target.prototype.constructor = Target;
Target.prototype.uber = Origin.prototype;//继承对象的属性
}
}())
function Preson( name ) {
this.name = name
}
function Preson1( ) {
}
inherit(Preson1,Preson)
p = new Preson1('a')
4.class extends继承