日期:2014-05-16 浏览次数:20332 次
?
?? ? ?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、原型方法