实例对象与new命令

对象是一个容器,封装了属性和方法。
属性是对象的状态,方法是对象的行为。比如,我们把动物抽象为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对象。

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