码迷,mamicode.com
首页 > 编程语言 > 详细

对象2——《javascript高级程序设计》读书笔记

时间:2015-05-19 22:23:15      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

——>创建对象

1:工厂模式:将创建对象的过程用函数进行包装,之后对函数进行调用便可以创建实例对象

技术分享
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("waiting_h","20","student");
var person2 = createPerson("william","29","star");
View Code

2:构造函数模式:与上述工厂模式的不同之处在于——没有显式的创建对象;直接将属性和方法赋给了this对象;没有return语句;创建实例对象时需要使用new操作符。

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

var person1 = new Person("waiting_h","20","student");
var person2 = new Person("william","29","star");
View Code

当然,为了避免构造函数内部的函数在每次实例化时都要创建(毕竟函数也是对象),可以将内部函数拿出来定义,在内部用赋值的方法进行引用,这样一来,多个实例对象中的该属性都指向同一个函数。而不是像之前每次都要创建时,每个实例对象中该属性都有一个函数副本。

此时,对于构造函数模式,我们应该来关注一下new操作符
——new操作符:使用new操作符会经历如下步骤:

      ——创建一个新对象;

      ——将构造函数的作用域赋给新对象(即this指向该新对象);

      ——执行构造函数中的代码(为新对象添加属性);

      ——返回新对象。

3:原型模式:

技术分享
funtion Person() {}
Person.prototype.name = "waiting_h";
Person.prototype.age = 20;
Person.prototype.job = "student";
Person.prototype.sayName = function() {
    alert(this.name);
};

var person1 = new Person();
View Code

———原型对象:包含可以由特定类型的所有实例共享的属性和方法。

我们在创建一个函数时,与此同时会自动生成该函数的一个prototype属性,该属性指向原型对象,可通过构造函数的该属性来添加原型对象的属性,而原型对象在被创建的同时也自动生成一个constructor属性,该属性指向原prototype属性所在的函数。

另外,在我们调用构造函数创建实例对象时,该实例对象内部包含一个属性[[Prototype]](ECMAScript 5)用来指向构造函数的原型对象

so:实例对象和构造函数之间没直接关系。

当然,原型属性有一个很大的弊端——由原型模式创建的实例属性拥有相同的属性方法,对于此弊端,我们可以利用实例属性来添加自己独特的属性,即使和原型对象中的属性重名,它也会屏蔽原型对象中的属性,因为查找某个实例属性时,是从实例本身开始,若没找到才会去原型对象中查找。

 

一般在使用时我们会比较青睐于构造函数模式和原型模式结合使用:构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性。

技术分享
function Person(name,age,job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["BigLun","William"];
}
Person.prototype = {
    constructor : Person;
    sayName : function() {
        alert(this.name);
    }
}

var person1 = new Person("waiting_h",20,"student");
View Code

 

对象2——《javascript高级程序设计》读书笔记

标签:

原文地址:http://www.cnblogs.com/waiting-h/p/4515620.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!