日期:2014-05-16  浏览次数:20343 次

JavaScript对象的创建、继承及原型

?

?? ? ?JavaScript是一种面向对象的脚本语言,但是JavaScript中的对象与其他语言(尤其是像Java、C#这样的静态语言)有很大的不同,JavaScript中的对象是基于原型的。原型是对象的基础,它定义并实现了一个新对象所必须包含的成员列表,并被所有同类对象实例所共享。与其他语言中类的概念相比,原型更像是类的静态成员。本文就JavaScript中对象的创建、继承做初步的讲解,并探讨下对象成员相关的一些概念和特性。(斑头雁原创:http://bantouyan.iteye.com)


一、创建对象


?? ? ?在JavaScript使用new操作符中创建对象,或者用直接量创建对象。与其他语言不同,JavaScript对象在完成创建后仍能增加成员,比如如下的代码:

var obj = new Object();
obj.name = 'alice';
obj.age = 18;
obj.getSalary = function(){return 8000 - this.age;};

?这段代码首先创建了一个Object类的对象,然后增加了三个成员。除了用new操作符创建对象外,我们还可以用直接量表示一个对象,如下面的代码:

var obj = {
    name: 'alice',
    age: 18,
    getSalary: function(){return 8000 - this.age;}
};

这段代码创建了一个对象,与前面代码创建的对象一样,但是相比较起来,用直接量方式更加简单明了。(斑头雁原创:http://bantouyan.iteye.com)


二、创建类


?? ? ?除了可以使用JavaScript内建的类外,我们还可以定义自己的类,定义类的方法一般有工厂方法、构造函数、原型方法和混合方法。

???

1、工厂方法


?? ? ?创建对象的传统方式是首先创建一个Object实例,然后增加成员属性,如果把这些代码用一个函数封装起来并返回所创建的对象,那这个函数就是创建对象的工厂函数。使用工厂函数的示例代码如下:

function pgetSalary() {return 8000 - this.age;}
function Employee(name, age){
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.getSalary = pgetSalary;
    
    return obj;
}
var obja = Employee('alice', 18);
var objb = new Employee('cindy', 20, true);
alert(obja instanceof Employee); //output false

采用工厂方式可以方便的创建大批量类似对象,但是工厂函数的名字并不是类的名字,虽然可以用new操作符,但仍无法使用instanceof来判断所创建的对象的类型。另外,如果把成员函数的函数体定义在工厂函数的内部的话,创建对象时会重复的创建成员函数实例(在JavaScript中函数也是一种对象),浪费存储空间。(斑头雁原创:http://bantouyan.iteye.com)

?? ? ? ?

2、构造函数方法


?? ? ?构造函数类似工厂函数,所不同的是构造函数的名字就是类名,可以用new操作符来创建对象。

function pgetSalary() {return 8000 - this.age;}
function Employee(name, age){
    this.name = name;
    this.age = age;
    this.getSalary = pgetSalary;
}
var obja = new Employee('alice', 18);
var objb = new Employee('cindy', 19);
alert(obja instanceof Employee); //output true

同工厂方式一样,如果类有成员函数,最好定义在构造函数意外,否则会因成员函数的重复创建而浪费空间。用构造函数创建对象的好处是所生成的对象可以用instanceof来判断所属的类。(斑头雁原创:http://bantouyan.iteye.com)

?? ? ? ?

3、原型方法