再说基于原型继承的JavaScript对象系统

在以类为中心的面向对象编程语言中,对象总是从类中创建而来。而在原型编程的思想中,一个对象是通过克隆另外一个对象所得到的。

在面向对象编程语言中,想要创建一个对象,要先指定它的类型,然后再通过类来创建这个对象。而原型模式则不再关心对象的具体类型,它通过找到一个对象,然后通过克隆来创建一个一模一样的对象。但这里要注意,原型模式的真正目的并非在于得到一个一模一样的对象,而是通过这种便捷的方式创建某个类型的对象,克隆只是创建这个对象的过程和手段。

如果克隆一个对象呢?ECMAScript5提供了Object.create方法,可以用来克隆对象。

        var A = function(){
                this.id = 100;
                this.level = 1;
                this.name = 'Tom';
        };
        
        var a = new A();
        a.id = 222;
        a.level = 2;
        a.name = 'Jhon';

        var b = Object.create(a);
        window.onload = function(){
        alert(a);
        alert(b);
        };

如果浏览器不支持Object.create,我们可以自己给Object加一个:

Object.create = Object.create || function(obj){
    var F = function(){};
    F.prototype = obj;
    return new F();
    }

以下是在浏览器调试上面这段JS得到的信息:

__proto__这个字段记录当前对象的原型。没有特别去克隆某个对象,那么它的默认原型就是Object。
如果B对象是从A对象克隆而来的,那么A对象就是B对象的原型。
如果A对象是从Object对象克隆而来的,B对象是从A对象克隆而来的,那么Object是A的原型,A是B的原型,它们之间就形成了一条原型链。
这个原型链非常有用,当我们尝试调用B对象的某个方法时,而它本身却没有这个方法,那么B对象就会把这个请求委托给它的原型A对象,如果A对象也没有这个方法,那么A对象会把这个请求委托给它的原型Object对象,这样一来就得到了继承的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值