JS基础面试题——原型和原型链

这篇文章主要说原型及原型链,鉴戒了一些网络大神的想法,有什么疑问可以提出来大家一起共同解决

1. 原型的五条规则

  • 所有的引用类型都可以自定义添加属性
  • 所有的引用类型都有自己的隐式原型(proto
  • 函数都有自己的显式原型(prototype)
  • 所有的引用类型的隐式原型都指向对应构造函数的显示原型
  • 使用引用类型的某个自定义属性时,如果没有这个属性,会去该引用类型的proto(也就是对应构造函数的prototype)中去找
原型链.png
   function Foo(name) {
      this.name = name;
      // return this;  // 本身会执行这一步
   }

   Foo.prototype.alertName = function() {
     alert(this.name);
   }

   var f = new Foo('shiyanping');

   f.printName = function() {
     console.log(this.name);
   }

   f.alertName();  // f.__proto__ -> Foo.prototype
   f.printName();
   console.log(f.toString());  // f.__proto__.__proto__

2. 如何准确判断一个变量是数组类型

arr instanceof Array

instanceof判断一个引用类型是什么引用类型,是通过proto(隐式原型一层一层往上找,能否找到对应构造函数的prototype)

3. 写一个原型链继承的例子

function Element(ele) {
  this.ele = document.getElementById(ele);
}

Element.prototype.html = function(val) {
  var ele = this.ele;
  if (val) {
    ele.innerHTML = val;
    return this;
  } else {
    return ele.innerHTML;
  }
};

Element.prototype.on = function(type, fn) {
  var ele = this.ele;
  ele.addEventListener(type, fn);
  return this;
}

var element = new Element('main');

element.html('hello').on('click', function() {
  alert('handleClick');
});

4. 描述new一个对象的过程

  • 创建一个新对象
  • this指向这个新对象
  • 执行代码给this赋值
  • return this
function Foo(name) {
  this.name = name;
  // return this;  // 本身会执行这一步
}

var f = new Foo('shiyanping');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 如果你觉得JS的继承写起来特别费劲,特别艰涩,特别不伦不类,我想说,我也有同感。尤其是作为一个学过Java的...
    光头韩阅读 3,251评论 0 2
  •   面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意...
    霜天晓阅读 6,426评论 0 6
  • 原型链是一种机制,指的是 JavaScript 每个对象都有一个内置的 __proto__ 属性指向创建它的构造函...
    劼哥stone阅读 9,888评论 15 80
  • 一切皆对象 js中的一个常见运算符 typeof 以上代码列出了 typeof 输出的集中类型标识, 其中上面的四...
    无迹落花阅读 6,091评论 0 5
  • 今天我们要期中考,全班同学个个紧张兮兮,开始考试了,我们都奋笔疾书,很快写完了,就在那认认真真的检查,不知不觉...
    破雷神龙阅读 1,059评论 0 2