回味JS(五)面向对象编程

2019-06-16  本文已影响0人  ArmorVon

什么是对象(广义上其他语言中的对象)?

构造函数有什么特点?

new命令的原理是什么?

  1. 创建一个空对象
  2. 将这个空对象的原型指向构造函数的prototype属性
  3. 绑定this指向,即指向这个空对象
  4. 开始执行构造函数内部的代码

手动实现一个new:

function newObject ()  {
   var obj = new Object()              // 从Object.prototype上克隆一个空对象 
   obj.__proto__ = Constructor.prototype  // 指向构造器的prototype
   var Constructor = [].shift.call(arguments)  
   var ret = Constructor.apply(obj, arguments)  
   return typeof ret === 'object' ? ret : obj
}

如果忘了使用new命令,直接调用构造函数会发生什么事?

构造函数内部return语句有什么注意点?

Object.create(null)和new object()和{}的区别?

什么情况下使用Object.create()来生成对象?

  1. 当你需要一个非常干净且高度可定制的对象当做数据字典的时候
  2. 需要自己定义hasOwnProperty、toString方法的时候

Object.create()生成对象的原理是是什么?

  1. 内部定义一个构造函数
  2. 将参数绑定到这个构造函数的Prototype,
  3. 返回这个构造函数的实例对象

内部实现的代码原理如下:

function create(o){
    function F(){}
    F.prototype = o;
    return new F();
}

this的指向?

在 ES5 中,其实 this 的指向,始终坚持一个原理: this 永远指向最后调用它的那个对象
this的指向常见于以下几种绑定方式:

  1. 默认绑定 (函数调用), 指向全局
  2. 隐式绑定 (方法调用), 当函数引用有上下文对象时,this指向这个上下文对象
  3. 显式绑定 (简介调用), 通过call()或者apply()绑定的this
  4. new绑定 (构造函数调用), 指向new出来的这个对象
  5. 箭头函数绑定, 箭头函数本身没有this,绑定的是最近一层非箭头函数的 this

改变this的几个方法,call、apply、bind有什么异同?

apply() 有哪些应用场景?

  1. 找出数组最大元素
Math.max.apply(null, array) 
  1. 将数组的空元素变为undefined
Array.apply(null, ['a', ,'b'])  // [ 'a', undefined, 'b' ]
  1. 转换类数组的对象
Array.prototype.slice.apply({0: 1, length: 2}) // [1, undefined]
上一篇 下一篇

猜你喜欢

热点阅读