ECMAScript学习笔记(六)——对象的创建

栏目: JavaScript · 发布时间: 6年前

内容简介:JavaScript高级程序设计的第六章。创建ECMAScript对象的一百种方法。除了之前记录过的直接new一个Object然后添加对象的方法,还有对象字面量的方法。ECMAScript还有一百种方法创建一个对象。嗯。

面向对象程序设计

JavaScript高级程序设计的第六章。

创建ECMAScript对象的一百种方法。

创建对象的一百种方法。

除了之前记录过的直接new一个Object然后添加对象的方法,还有对象字面量的方法。ECMAScript还有一百种方法创建一个对象。嗯。

使用Object构造函数和对象字面量的方法创建对象,会产生很多重复代码嗯,并且无法知道对象的类型。

工厂模式

function createPerson(name, age, job) {
  var o = new Object();
  o.name = name;
  o.age = age;
  o.job = job;
  o.sayName = function() {
    alert(this.name);
  };
  return o;
}

var person1 = createPerson("Nicholas", 29, "Software Engineer");
var person2 = createPerson("Greg", 27, "Doctor");

工厂模式能够解决Object构造函数和对象字面量会产生的大量重复代码的问题,但是却无法解决对象识别的问题。我们无法知道一个对象的类型。

构造函数模式

function Person(name, age, job) {
  this.name = name;
  this.age = age;
  this.job = job;
  this.sayName = function() {
    alert(this.name);
  };
}

var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

Person()中的代码,没有显式的创建对象,直接将属性和方法赋给了this对象,也没有return语句。

按照惯例,构造函数始终都应该以一个大写字母开头。

要创建Person的实例,就需要使用new操作符。以这种方式调用构造函数会经历四个步骤:

(1) 创建一个新对象

(2) 将构造函数的作用域赋给新对象.this指向了这个新对象

(3) 执行构造函数中的代码

(4) 返回新对象

person1和person2分别保存着Person的一个不同的实例。这两个对象都有一个constructor属性,这个属性指向Person。

person1.contructor == Person;
person1 instanceof object;
person1 instanceof Person;

创建自定义的构造函数,意味着将来可以将它的实例标识为一种特定的类型。

对于这种构建方法,有以下几个特点。

1.将构造函数当做函数

构造函数和普通的函数是一样的。只不过用new操作符来调用的时候,就会变成一个构造函数了。

2.构造函数的问题

构造函数,会使类型的每个方法都要在每个实例上重新创建一遍。(如上述示例中的sayName方法)

所以,每个实例所拥有的方法,是不同的实例。

于是,可以这样创建一个对象:

function Person(name, age, job) {
  this.name = name;
  this.age = age;
  this.job = job;
  this.sayName = sayName;
}

function sayName() {
  alert(this.name);
}

但是这样子,就在全局作用域中创建了一个,只有Person对象才能调用的方法。

十分恶心。于是,这些问题是可以通过原型模式处理掉的嗯。

原型模式


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Domain-Driven Design Distilled

Domain-Driven Design Distilled

Vaughn Vernon / Addison-Wesley Professional / 2016-6-2 / USD 36.99

Domain-Driven Design (DDD) software modeling delivers powerful results in practice, not just in theory, which is why developers worldwide are rapidly moving to adopt it. Now, for the first time, there......一起来看看 《Domain-Driven Design Distilled》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具