instanceof2

Instanceof 原型链

People.prototype===Student.prototype.__proto__  //True
james.hasOwnProperty('sayhi') //false

换句话说,proto就是去找上一层class的prototype

Class是ES6语法规范,是由ECMA委员会发布
ECMA只规定语法规则,不规范如何实现
以上是V8引擎实现方式

如何判断一个变量是否是数组array(instanceof)
var ary=[1,2,3,4];
console.log(ary.intanceof Array) //true

class的原型是本质

手写jquery插件

    console.log('jquerydemo');
class JQuery{
    constructor(selector){
        const result =document.querySelectorAll(selector)
        const length =result.length;
        for (let i =0;i<length;i++){
            this[i]=result[i];
        }
        this.length=length
        //类似于数组,但其实是object
        this.selector=selector;
    }
    get(index){
        return this[index]
    }
    each(fn){
        for(let i = 0;i<this.length;i++){
            const elem =this[i]
            fn(elem)
        }
    }
    on(type,fn){
        return this.each(elem=>{
            elem.addEventListener(type,fn,false)
        })
    }
}

//插件
JQuery.prototype.dialog=function(info){
    alert(info)
}

class myJQuery extends JQuery{
    constructor(selector){
        super(selector)
    }
    addClass(className){

    }
    style(data){

    }
}

    //const $p = new JQuery('p');
    //$p.get(1)
    //$p.each
    //$p.on('click',()=>alert('clicked'))

每个函数都有一个prototype属性
这个属性都有一个指针,指向一个对象
这个对象包含由特定类型所有实例共享的属性和方法
使用原型的好处是可以让所有对象实例共享他们包含的方法和属性
一般通过instanceof关键字来基于原型链来检测变量的类型
Object 是所有js class的父类