(复习)js之属性与继承

js是函数第一型的语言,在下面使用函数来创建对象。

一、属性

1.私有属性

在函数中,使用var或function声明来维持私有属性(包括普通变量和方法)

 

2.共有属性

共有属性采用this.attr的形式

 

3.原型属性

以objName.prototype.attr设置的属性,即在原型对象上添加的属性

 

4.类属性

objName.attr设置的属性

例子:

function obj(){
    
var a = 1;
    
this.b = 2;       
    
function c(){
        
return 3;
    }     
    
this.d = function(){
        
return 4;
    }
}    
var o = new obj();
document.write(o.a
+"  "+o.b+"  "+o.c+"  "+o.d());

 

得到结果: undifined    2    undifined    4

 

二、继承

1.构造继承

方法:在子类的构造方法中,通过apply或call函数调用父类的构造函数,实现父类属性到子类构造函数中this的复制

function A(){     //父类
    this.a = 1;
}
function B(){     //子类
    A.apply(this);
}

缺点:不能继承原型属性

优点:能够实现多继承,即在子类构造函数中多个父类apply即可;能够解决构造函数带参数的问题

 

2.原型继承

方法:直接只用对象的prototype属性设置父对象(非父类)

B.prototype = new A();

缺点:修改了子对象的constructor属性;子类构造函数参数传递的问题;只能实现单继承;被迫实例化父类,有很多负作用

 

3.实例继承

基于的思想:若构造函数的返回值为值类型(没有写return的返回undefined),new只是初始化this传递进来的值;若构造函数返回一个引用类型,则new返回的引用类型所指的对象

function B(){
    
var a = new A();  //创建父类实例
     a.attr1 = 1;    //添加属性
    return a; 
}

优点:能够对属性进行扩充

 

4.clone法

思路:使用自定义的clone把父类的所有属性copy一份(来个深度克隆,包括prototype属性)

function clone(obj){
    
if(typeof(obj) != "object")return obj;
    
if(obj == null)return obj;
    
var newObj = new Object();
    
for(var i in obj){
        newObj[i] 
= clone(obj[i]);
    }
    
return newObj;
}

 

 

 

posted @ 2009-11-01 21:56  Hank Chu  阅读(1014)  评论(0编辑  收藏  举报