转 cvte前端笔试后的js原型总结


 最近实习生招聘已经开始了,昨天晚上也终于迎来了第一场笔试,笔试的公司是cvte,笔试题总共27题,25道不定项还有2道编程题,虽然出的都是前端题,但是因为之前没有好好准备,还是很多做的不是很好o(╥﹏╥)o考完试后也总结了一下,考的以node,原型,promise比较多,之前以为自己原型掌握的还可以,一考才发现问题啊,赶紧总结一下O(∩_∩)O

一、从笔试说起

  大家觉得自己原型掌握的怎么样呢?昨天的笔试出了不少原型的题,一个prototype还好,多个加在一起真的是有点晕了,下面是记得的一道题,大家觉得会输出什么呢?

 
function Person(){}

var person1 = new Person();

  这个时候Person的构造函数,Person的原型属性和Person的实例之间的关系可以这样表示

  从上面的图我们可以看到,Person是构造函数,它将根据一组特定的规则创建prototype属性,并且指向Person的原型对象,而Person.prototype的constructor会指向Person构造函数,而person1是Person的实例,会包含一个内部属性__proto__指向Person.prototype,大家别小看__proto__,正因为有了这个属性,我们就可以在Person.prototype上添加属性和方法,这些属性和方法将会被所有实例所共享,比如说可以像下面这样在Person的原型上添加属性和方法

 
Person.prorotype.isPrototypeOf(person1);        //  true
Person.prototype.isPrototypeOf(person2);        //  true

  因为person1和person2内部的[[Prototype]]都指向Person.prototype,所以返回true

4、怎么判断属性存在实例还是原型中

  前面已经说过,如果在对象的实例上搜索不到某个属性时,将会在原型对象上进行搜索,如果我们在实例中添加了一个属性,而该属性与实例原型中的一个属性同名,那么该属性将会屏蔽原型中的那个属性,那么,我们怎么判断一个属性是存在实例还是存在原型中呢,这里可以用hasOwnProperty进行判断

  使用hasOwnPrototype方法可以检测一个属性是否是存在于实例中,还是存在于原型中,旨在给定属性存在于对象实例中时,才会返回true

5、再来一个题

  上面对原型做了一个比较简单的介绍,不知道大家是不是对原型有个了解了,最后,我们在来看下面的题输出的是什么?

  大家知道typeof Function.prototype.__proto__又是什么呢?大家自己输出代码试一试,结果会输出object哟,我们看看下面的代码

 
Function.prototype.__proto__ === Object.prototype;    // true

  一般来说,除了Object.prototype之外的所有对象都会有[[Prototype]],也就是__proto__属性,会指向实例化出这个对象的构造函数的原型,而为什么Object没有呢,因为js的继承机制主要是原型链实现的,而原型链的头就是Object.prototype,而这里Function.prototype其实就是指向了Object.prototype

  今天主要介绍这么多了,接下来要好好准备笔试,准备面试了,其实在笔试和面试中,我们可以发现自己在哪方面的不足,及时的进行总结,其实面试对于我们来说,也是一种不断学习的过程,希望大家都能加油拿到自己想要的offer


__EOF__

 
  • 本文作者: Yellow-ice
  • 本文链接: 
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角【 Yellow_ice
    关注 - 2
    粉丝 - 57       上一篇: 
    下一篇:   



相关