前端面试题之原型链常见面试题总结

更新时间:2023-07-21 02:41:40 阅读: 评论:0

前端⾯试题之原型链常见⾯试题总结
1.如何准确判断⼀个变量是数组类型。
使⽤instanceof进⾏判断,typeof是⽆法判断数组的。在ES6中新增了Array.isArray⽅法进⾏判断。
2.写⼀个原型链继承的例⼦
//动物的构造函数,有⼀个⽅法eat
苁蓉的功效function Animal(){
this.eat=function(){
console.log('animal eat');
秋兴八首其五}
}
//狗的构造函数,有⼀个⽅法bark
function Dog(){
this.bark=function(){
console.log('dog bark');
}
}
//将Animal的实例赋值给Dog的原型对象
Dog.prototype =new Animal()
计算机发展历史
//new了⼀个Dog的实例对象,原型对象有eat⽅法,原型链上有bark⽅法
var tudog =new Dog()
console.log(tudog);//⾃⾝拥有bark⽅法,原型上拥有eat⽅法
在上⾯这个例⼦中,Animal是⼀个构造函数,Dog也是⼀个构造函数,我们将Dog的原型对象变成了A
大和拜金女
nimal的实例对象当我们new⼀个Dog的时候,先从本⾝继承了bark⽅法,同时继承了原型链Animal上的eat⽅法,当我们调⽤eat⽅法的时候,就会打印animal eat,是因为当在当前对象中的属性没有找到此⽅法,便会沿着原型链进⾏寻找知道Object.prototype这个⼤boss的原型对象上才终⽌,因为它的原型对象是null。
3.请介绍⼀下什么是原型。
原型是⼀个函数,其中的prototype是原型对象,这是开始就有的。在原型对象中其中定义了⼀些公⽤的属性和⽅法铜钱鉴定
重点:
1.每⼀个函数对象都有⼀个prototype属性,但是普通对象是没有的。
2.prototype原型对象中有⼀个constructor构造函数,指向这个函数
3.每个对象都有⼀个__proto__的内部属性,指向所对应的构造函数的原型对象,原型链是基于__proto__的。
原型的主要作⽤就是实现继承与扩展对象。
4.请介绍⼀下原型链。追梦青春
每⼀个函数都有⼀个prototype属性,成为原型,⽽原型的值也是⼀个对象,因此它也有⾃⼰的原型,这样就串起了⼀条原型链。原型链的链头是Object,他的prototype⽐较特殊,值为null。
学生工作经历
每个函数都有⼀个prototype属性,它是⼀个引⽤变量,默认指向⼀个空的object对象。当调⽤⼀个对象的函数或者是属性的时候,如果在当前对象⾥⾯找不到,那么就会在原型对象上逐层寻找。
在javascript中,所有的对象都有⼀个__proto__的属性,它指向了当前对象的原型(prototype)。⽐如Animal是⼀个构造函数,它的本质就是⼀个函数,在js中函数是⼀等对象。
可以说,原型链是原型对象创建过程中的历史记录。
每⼀个对象都会在内部⽣成⼀个proto属性,当我们访问⼀个对象属性的时候,如果在这个对象中不存在这个属性,那么就会在它的proto 属性指向的对象中去寻找。⼀层⼀层找下去,当最后找到Object.prototype的时候,这条原型链就到头了。(proto最终指向obj)
我们来看⼀个例⼦巩固⼀下刚学的知识:
var Person=function(name){
this.name = name;//给Person对象增加了⼀个name属性,值为传⼊的值。
}
Person.prototype.sayHi=function(){//Person的原型对象增加了sayHi⽅法
console.log("Hello! I am "+this.name +".");
}
var joe =new Person("joe");
//new了⼀个实例会实现以下⼏步
//1.创建⼀个空对象obj
//2.设置这个空对象的__proto__的属性指向构造函数的prototype
//3.让构造函数的this指向这个空对象,然后执⾏构造函数⾥⾯的代码
//4.如果函数没有return语句,或是return基础类型,返回⽣成的对象知识产权保护法
/
/5.如果函数return了⼀个引⽤类型的数据,则最终返回这个引⽤类型
var john =new Person("john");
joe.sayHi();//Hello! I am joe.
john.sayHi();//Hello! I am john.
上⾯的代码中,⾸先声明了⼀个Person构造函数,其中的this.name到了每⼀个新的实例中都会执⾏⼀遍,相当于Object.name = name,第⼆步我们给它的原型对象上添加了⼀个sayHi的⽅法,在new实例时,将会有_proto_指向此对象,同时也继承了此⽅法。new实例后,⾸先⽣成⼀个空对象,接下来将对象的_proto_的属性指向了原型对象,接着将构造函数中的代码执⾏了⼀遍,因此在新的实例中,拥有了name这个属性,同时也继承了原构造函数prototype的⽅法,因为没有return⼀个引⽤类型,因此new实例获得的是我们⽣成的对象。
从上⾯的描述中我们总结如下:原型定义了⼀些公⽤的属性和⽅法,利⽤原型新构建出来的对象实例会共享原型的所有属性和⽅法。
原型链:原型链是原型对象创建过程中的历史记录。
5.为什么⽅法放在prototype原型对象中⽽不放在构造函数的属性中
放在Prototype中只需要在构造函数中实现⼀次加载,在new的实例中只需要_proto_指向此对象即可通过原型链使⽤此⽅法,⽽如果放在构造函数的属性中,每次new实例都需要调⽤⼀次,⽐较浪费性能。
6.说⼀下instanceof的原理
instanceof判断实例对象的_proto_属性,和构造函数的prototype属性,是不是同⼀个引⽤,所以只要是在原型链上的构造函数都是new 实例的构造函数,都返回true,使⽤_proto_.constructor === M 进⾏判断实例是不是构造函数的实例,⽐Instanceof更严谨。

本文发布于:2023-07-21 02:41:40,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1089955.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:斯瓦迪士100词
标签:对象   原型   属性
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图