JavaScript对象的深刻理解 (一)

对象,一种数据类型。对象是属性(变量)方法(函数)结合在一块儿的数据实体函数

对象的出现,就是为了解决封装的问题。能够将许多属性与方法封装在一个对象里,方便调用,也符合人的思考方式。this

JavaScript中建立对象的基本方法

  1. 建立Object实例,再添加属性和方法
var person = new Object();
    person.name = "Jonathan";
    person.age = 23;
    person.job = "Developer";
    person.sayName = function () {
    console.log(this.name);
};
  1. 对象字面量方法
    因为上述写法繁琐,故出现了对象字面量方法建立对象。
var person = {
    name: "Jonathan",
    age: 23,
    job: "Developer",
    sayName: function () {
        console.log(this.name);
    }
};

console.log(person.name); //Jonathan
person.sayName(); //Jonathan

这样一来,就把属性和方法封装进了一个对象中,方便调用。code

构造函数模式

若是要建立许多对象,传统方法存在如下问题对象

  • 对象名太多,容易搞重复
  • 新建一个对象就要所有重写属性和方法,过于复杂
  • 没法发挥JavaScript的面向对象优点(继承)

因为JavaScript自己没有类的概念,所以诞生了构造函数模式来建立对象,该方法利用函数建立对象。因为函数自己也是对象,所以能够这么操做。
构造函数建立对象的方法是:继承

function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function(){
                       console.log(this.name);
                   };    
}
        
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

要点:ip

  1. 构造函数命名应以大写字母开头(约定俗成的规矩)
  2. 构造函数自己也是函数,只不过是用来建立对象的
  3. 要建立对象的实例,必需要用new操做符,不然跟调用函数无异。
  4. 任何函数,只要经过new操做符来调用,它就能够做为构造函数。

至此,一个Person对象的建立就完成了,它有如下优势:原型

  • 新建对象只用给函数提供参数,简化了建立。
  • 有了实例的概念,如Person1就是Person的实例。无形之中给对象归了类。
  • 更好的体现了封装,建立对象只用给参数,不用关心对象内部细节。

用构造函数模式的方法建立对象并非完美的,它存在如下问题,即:
每一个方法(对象内置函数)都要在实例上从新建立一遍
构造函数也能够用如下方法定义,方便咱们发现问题io

function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = new Function(console.log(this.name));
    };    
}
        
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

console.log(person1.sayName == person2sayName); //false

在新建对象person1和person2时,分别新建了两个不一样的方法person1.sayName()和person2.sayName()。
但这很没有必要,只须要公用一个sayName()方法就行了。为了解决上述问题,诞生了原型模式console

相关文章
相关标签/搜索