课程名称:JS基础—原型和原型链
课程章节:Javascript面试课
课程讲师: 双越
课程内容:
原型和原型链
问题:
1.如何判断一个变量是不是数组?
a instanceof Array
2.class的原型本质,怎么理解?
原型和原型链的图示
属性和方法的执行规则
知识点:
如何用class实现继承?
// 父类 class People{ constructor(name){ this.name = name } eat(){ console.log(`${this.name} eat something`); } } //子类 class Student extends People{ constructor(name,number){ super(name) this.number = number } sayHi(){ console.log(`${this.name}在和老师打招呼`); } } class Teacher extends People{ constructor(name,major){ super(name) this.major = major } teach(){ console.log(`${this.name} 教授 数学`); } } // 通过类 new 一个对象/实例 const lilei = new Student('李雷',200) console.log(lilei.name); //李雷 console.log(lilei.number); //200 lilei.sayHi(); //李雷在和老师打招呼 lilei.eat(); //李雷 eat something const wanglaoshi = new Teacher('王老师' , '数学') console.log(wanglaoshi.name); //王老师 console.log(wanglaoshi.major); //数学 wanglaoshi.teach() //王老师 教授 数学 wanglaoshi.eat() //王老师 eat something
2.如何理解 JS 原型 (隐式原型和显示原型)
//class 实际上是函数,可见是语法糖 typeof People //'function' typeof Student //'function' //隐式原型和显示原型 console.log( lilei.__proto__ ) console.log( Student.prototype ) console.log( xialuo.__proto__ === Student.prototype) //true
原型关系
◆每个class都有显示原型prototype
◆每个实例都有隐式原型_proto_
◆实例的_proto_指向对应class的prototype
基于原型的执行规侧
◆获取属性xialuo.name或执行方法xialuo.sayhi() 时
◆先在自身属性和方法寻找
◆如果找不到则自动去_proto_中查找
还剩一个手写JQuery,看不懂