对象

2018-10-16  本文已影响4人  数据研究bot

原型

为了更好理解原型的概念,先做一个准备工作。
首先创建一个新数组,并为其中一个变量添加属性和方法,该变量可以实现属性和方法的调用。其次创建另一个变量,并调用之前变量的属性和方法,可以发现调用的结果是undefined和报错,那么问题来了,如何才能让arr1也能调出arr的属性和方法呢?这里就涉及到了原型的概念。



创建对象的几种方法

工厂模式创建对象
构造函数创建对象

可以看出,在工厂模式下必须要有返回值,而且并没有解决对象的识别问题,比如在函数内部创建对象时,我们无法判断出创建对象的具体类型,而构造函数模式下,由于是自己构造的,因此我们可以清楚的知道创建对象的类型。
原型模式创建对象

原型模式创建对象可以节约空间,提升性能,将方法以字面量的形式储存在原型中,开发中常用这种方法来解决问题。

这里又引申出一个新问题,this属性如何使用?

  1. this所在的函数在哪个对象中,this就代表哪个对象:比如图片中的this在Person函数对象中,那么this就代表Person对象,this.names指的即为Person对象中的names属性;
  2. 谁调用this就是谁:比如下方的例子
    function test(){
    console.log(this);}
    test();//window.test()
    由于此时this指向的是window对象,因此实际上是window在调用test。
  3. 构造函数中的this,始终是new的当前对象;
  4. call与apply、bind方法可以改变this的指向,call与apply的区别是传参类型不同,前者传入的实参与形参要相统一,后者传参类型为数组,bind则需要连接在函数表达式后。



继承模式
上一篇 下一篇

猜你喜欢

热点阅读