(复习)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;
}

 

 

 

转载于:https://www.cnblogs.com/return/archive/2009/11/01/1594143.html

你可能感兴趣的:((复习)js之属性与继承)