原型式继承-Object.create()

  1. 原型式继承是由道格拉斯发明的一种继承方法,该方法没有严格意义上的构造函数。借助原型可以基于已有的对象来创建对象。他给出了函数:
     function object(obj) {
         //定义了一个临时构造函数
         function F() {}
         //将这个临时构造函数的原型指向了传入进来的对象。
         F.prototype = obj;
         //返回这个构造函数的一个实例。该实例拥有obj的所有属性和方法。
         //因为该实例的原型是obj对象。
         return new F();
     }
new F();的过程相当于如下,假设实例对象为f
//相当于将构造函数的原型对象赋给实例对象p的属性__proto__
var f.__proto__ = Object.setPrototypeOf({},F.prototype);
//构造函数在实例f中执行
F.call(f);

所以通过该函数object(),就能返回一个实例,该实例的原型指向了另一个对象。因此就拥有了另一个对象所拥有的全部属性和方法。

var obj = {
    name: "zhenglijing",
    sayName: function() {
        alert(this.name);
    }
};

function object(obj) {
    function F() {}
    F.prototype = obj;
    return new F();
}

var o1 = object(obj);
o1.name;
o1.sayName();

2、后来,ECMAScript5规范了称之为原型式继承,即使用Object.create()方法。
接受两个参数:第一个是作为新对象的原型对象,第二个是可选参数,是作为新对象定义额外属性的对象。接收一个参数时和object()方法一致。

在没有必要使用创建构造函数,而只想让一个对象与另一个对象保持类似的情况下,原型式继承就可以了。不过,该模式下,包含引用类型的属性始终都会共享相应的值。
想要让A对象和B对象一致,难道不可以这样吗?
    var A = B;//把B的引用值赋给A,那么A不就和B类似了吗?
    但是情况是,A要新添删除属性和方法时,B也将会新添删除相应的属性和方法。因为A和B是指向的同一个对象。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值