面向对象--继承

1. 什么是继承

在原有对象的基础上,略作修改,得到一个新的对象,不影响原有对象的功能。即子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 )

function CreatePerson(name,sex){   //父类
    this.name = name;
    this.sex = sex;
}
CreatePerson.prototype.showName = function(){
    alert( this.name );
};
var p1 = new CreatePerson('小明','男');
p1.showName();//小明

属性的继承 : 调用父类的构造函数 call
方法的继承 : for in : 拷贝继承 (jquery也是采用拷贝继承extend)

一个简单的继承,但是这种继承会影响到父类,即父类也会有showJob

function CreateStar(name,sex,job){  //子类    
    CreatePerson.call(this,name,sex);   
    this.job = job;
}
CreateStar.prototype = CreatePerson.prototype;
CreateStar.prototype.showJob = function(){
};
var p2 = new CreateStar('黄晓明','男','演员');
p2.showName();

2. 对象的复制

var a = {
    name : '小明'
};
var b = a;
b.name = '小强';
alert( a.name );//小强。因为这里会互相影响

如果是基本类型,比如string,number,则不会出现这样的问题
思路一:‘小明’是字符串,则可以通过字符串赋值来实现

var a = {
    name : '小明'
};
var b = {};
for(var attr in a){
    b[attr]=a[attr];
}
b.name = '小强';
alert( a.name );//小明。不会影响

可以封装一个函数

var a = {
    name : '小明'
};
var b = {};
extend( b , a );
b.name = '小强';
alert( a.name );//小明。不会影响
function extend(obj1,obj2){
    for(var attr in obj2){
        obj1[attr] = obj2[attr];
    }
}

再回到刚才那个问题,进行改写,现在就不会影响父类了

function CreateStar(name,sex,job){  //子类
    CreatePerson.call(this,name,sex);
    this.job = job; 
}
extend( CreateStar.prototype , CreatePerson.prototype );
CreateStar.prototype.showJob = function(){
};
var p2 = new CreateStar('黄晓明','男','演员');
p2.showName();
function extend(obj1,obj2){
    for(var attr in obj2){
        obj1[attr] = obj2[attr];
    }
}

函数和对象类型还是有区别的,函数没办法直接修改,类似于b.push(4);只能改变,类似于b = [1,2,3,4];
继续看下面的例子

var a = [1,2,3];
var b = a;
b.push(4);
alert(a);//[1,2,3,4]
var a = [1,2,3];
var b = a;
b = [1,2,3,4];
alert(a);//[1,2,3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值