实例对象与new命令

2018-10-08  本文已影响0人  Jason_Shu

对象是一个容器,封装了属性和方法。
属性是对象的状态,方法是对象的行为。比如,我们把动物抽象为animal对象,动物的身高、体重等等,就是动物的「属性」,奔跑、飞翔、觅食等等,就是动物的「方法」。

  1. 构造函数
    构造函数就是对象的模板。它专门用于生成实例对象的函数,一个构造函数可以生成多个实例对象。
var Animal = function() {
  this.height = 100;
  this.eat = function() {
    console.log("eat!!!!");
  }
};

构造函数的特点有两个:
(1) 函数体内必须使用「this」关键字,代表了所要生成的实例对象。
(2) 生成实例对象的时候,必须使用「new」。

  1. 基本用法
var dog = new Animal();
dog.height;  // 100

一般使用new 构造函数来创建一个实例对象,那如果声明的时候没有加new呢?

var dog =  Animal();

dog;  // undefined
height;  // 100

此时构造函数Animal里面的this指向了顶层对象(window),所以直接输出height是100。

  1. new命令的基本原理

使用「new」命令时,会按以下步骤执行:
(1)创建一个空对象,作为将要返回的对象实例。
(2)将这个空对象的原型,指向构造函数的「prototype」属性。
(3)将这个空对象赋值给构造函数内的「this」关键字。
(4)开始执行构造函数内的代码。

如果构造函数有「return」语句,而且「return」语句后面还跟着一个对象,那么「new」后会返回「return」语句后的对象。否则,就不会例会「return」语句,直接返回「this」对象。

var Animal = function() {
  this.height = 100;
  this.eat = function() {
    console.log("eat!!!!");
  }
  return 100;
};

(new Animal() === 100);  // false
var Animal = function() {
  this.height = 100;
  this.eat = function() {
    console.log("eat!!!!");
  }
  return {width: 100};
};

(new Animal()).width;  // 100

上面代码构造函数return了一个新对象,则会返回这个对象,不会返回this对象。

上一篇 下一篇

猜你喜欢

热点阅读