每一个函数都有一个prototype属性,这个属性指向函数的原型对象

每一个对象都有一个__proto__属性,这个属性指向该对象的原型

每一个原型都有一个constructor属性,这个属性指向构造函数

构造函数通过new建立一个实例,这个实例可以通过__proto__找到它的原型,再通过constructor指向到构造函数

因为实例的__proto__属性指向于实例的原型,而这个原型可以通过constructor属性指向到构造函数

例如:

function home(a,b){
    this.a = a;
    this.b = b;
}
var gpp = new home('hi','qaqio');
console.log(gpp.__proto__ == home.construction);

console.log(gpp.__proto__.constructor == home);

console.log(home.prototype == gpp.__proto__);

结果全部为true


class

class test{
    constructor(hi){
        this.hi = hi;
    }
    print_go(){
        console.log(this.hi);
    }
}
new test('hello').print_go();

继承

class test_a extends test {
    constructor(hi, abc){
        super(hi);
        this.abc = abc;
    }
    abc_1(){
        console.log(`hi,${this.hi}`);
    }
}
let go = new test_a('no','qaq');

console.log(go.hi, go.abc);
go.abc_1();

go.print_go();

instanceof

instanceof 可以判断一个引用是否属于某构造函数

例如:

function obj(hemo,go){
    this.hemo = hemo;
    this.go = go;
}

var no = new obj('go',10)

console.log(no instanceof obj);

结果为true,说明no实例的构造函数为obj