1、使用一对大括号,如下形式
- var person = {
- 'id':1,
- 'name':'yining' ,
- 'get':function(){
- return this.id;
- }
- };
需要对这个对象进行扩充时,可以这样做:
- person.speak = function(language){
- alert(this.name+" speaks "+language);
- }
调用: person.speak("chinese");
但是使用这种方式时,只是简单的声明了一个变量,只有一份拷贝,因此不能使用new操作。在需要多个对象时,可以使用下面的方法。
2、使用关键字function,在Javascript中,没有Class这样的关键字,可以使用function来模拟类的创建
- function Person(id ,name){
- this.id = id;
- this.name = name;
- this.getId = function(){
- return this.id;
- }
- } ;
var person = new Person(22,'yining'); 使用new关键字产生一个Person实例person(当然你可以new多个实例),这种通过New来产生实例的方式不推荐,因为这个过程会很慢,消耗时间。当需要对这个对象进行扩展时,也可以通过
- person.speak = function(language){
- alert(this.name+" speaks "+language);
- }
这种方式。
说说function关键字
在对象的创建过程中,多次使用了function关键字,使用function既可以创建对象,同时也是函数的声明关键字,一般来说,function有三种功能:
1、普通函数:
- function fun_name([arguments]){
- }
2、构造函数:
- function Obj_name([arguments]){
- 属性 = 属性赋值;
- .......
- }
3、构造完整对象:
- function Obj_name([arguments]){
- 这里不仅包括属性也有方法;
- .......
- }
注意:当function被用来做构造函数和构造对象时,对象名首字母大写。
这里是人为的强制性的将function的功能细分为3种(或许可以分得更多),实际上,在javascript中,由于函数本身就是对象(任何函数都是Function的实例,函数名只是指向这个函数的一个引用),所以函数可以有自己的属性和方法,这个弱化了函数和对象之间的区别。(如果在Java中,也提供了一个Function的类,那么所有类内部封装的方法是不是也可以作为一个对象,这才是真正的面向对象?只有这样,才能符合“一切都是对象”?)
对象的继承
在javascript中,使用对象冒充+原型链来实现对象的继承。
首先看一个例子:
- function Person(id,name){ //属性使用构造函数的形式
- this.id = id;
- this.name = name;
- }
- Person.prototype.getName = function(){ //方法使用原型
- alert(this.name);
- }
- function Chinese(id ,name,province){
- Person.call(this,id,name); //对象冒充继承Person类的属性,实际上是函数call的调用
- this.province = province;
- }
- Chinese.prototype = new Person(); //用原型链继承Person类的方法,本质上是把Person类的实例赋予prototype属性。
- Chinese.prototype.getProvince = function(){
- alert(this.province);
- }
- var ch = new Chinese(1,'yining','sha\'anxi');
- ch.getProvince();
为什么要采取这种方式来实现继承?不是很麻烦么?这种做法的确看起来不如Java、c++中的继承来的方便,但是这的确是在多种角度权衡下最合理的方式,具体的权衡您可以去看《javascript高级程序设计》。
注意:在创建对象时,属性使用构造函数的形式,方法则采用原型的方式,这样在要多次生成实例时,可以减少开销。在实现继承时,使用BaseClass.call(this,[arguments])实现属性的继承,将BaseClass的实例赋予ChildClass.prototype属性,来实现方法的继承。
由于Javascript是一种动态的语言,在完成实例的创建后,可以继续为此实例进行扩展,添加函数。而在java中是不允许对实例进行扩展以及不允许对声明后的类进行修改。在Javascript中,所有的一切都可以在运行时被修改。