介绍
这篇文章主要介绍了javascript原型和继承的面试题示例,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
本文从以下几个方面着手
- <李> <强> 0怎么理解面向对象强> 李> <李> <强> 1创建对象的方式强> 李> <李> <强> 2记住原型链的小窍门强> 李> <李> <强> 3 instanceof模拟实现强> 李> <李> <强> 4新关键字模拟实现强> 李> <李> <强> 5继承的实现(逐步实现)强> 李>
0怎么理解面向对象
其实我也不知道咋回答这问题,我只知道,面试官问这个后,就表示他要问一堆继承的问题了。下面是引用周老师的一段说辞。
“面向对象是一种编程思想与面向过程是对应的一般的语言都是面向对象的js本身也是基于面向对象构建出来的,例如js本身就有很多内置类,承诺就是,可以新承诺来创建一个实例,来管理异步编程。还vue也有是,平时都是创建vue的实例啊!”
1创建对象的方式
1。对象字面量
var o1={名称:& # 39;o1群# 39;} var o2=新对象({name: & # 39; o2 # 39;})
2。通过构造函数
var M=函数(名字){ this.name=名字 } var o3=新的M (& # 39; o3 # 39;)
3.对象。创建
o3。__proto__===M。//真正的原型 o3。//定义原型 o3。__proto__===M。原型//真正的李> <李>
o3实例本身并无构造函数,不过会借助原型链向上查找,即,
o3。构造函数===M.prototype。构造函数//真 o3。构造函数===M//真正的李>
小结理清这几个关键词的关系后,原型链就明朗很多了
引用>3 instanceof模拟实现
运算符的原理是什么呢?先来看一下使用
[]数组运算符//真正的即左边是对象,右边是类型,instanceof就是要判断右边类型的原型,是否在左边实例的原型链上,如下例子所示
[]。__proto__===数组。//真正的原型 Array.prototype。__proto__===对象。//真正的原型 对象。prototype__proto__零//那么依据这个思想来实现一下instanceof吧,一定会印象更加深刻
引用>函数myInstanceof2(左、右){ 如果(左===null | |左===定义){ 返回假 } 如果(右。原型===left.__proto__) { 还真 } 左=left.__proto__ 返回myInstanceof2(左、右) } 控制台。日志(myInstanceof2([]数组))4新模拟实现(简要版)
新的过程发生了什么?
引用><李>
生成空对象
李> <李>这个空对象的<强>原型>强赋值为构造函数的原型
李> <李>绑定这指向
李> <李>返回这个对象
//构造函数 函数(名字){ this.name=名字 }//原生新 var obj=new () & # 39; 123 & # 39;//模拟实现 函数创建(){//生成空对象 让obj={}//拿到传进来参数的第一项,并改变参数类数组 让反对=[].shift.call(参数)//对空对象的原型指向赋值 obj。__proto__=Con.prototype//绑定//(对应下面使用来说明:缺点是参数第一项,//参数是参数[& # 39;123 & # 39;],//就是M方法执行,参数是& # 39;123 & # 39;执行这个函数的这是obj) 让结果=Con.apply (obj,参数) 返回结果实例对象?结果:obj } var testObj=创建(M & # 39; 123 & # 39;) console.log (& # 39; testObj& # 39;, testObj)javascript原型和继承的面试题示例