您的位置:首页 > Web前端 > JavaScript

(复习)js之属性与继承

2009-11-01 21:56 316 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: