JS创建对象的另一种方法是如何理解的?

我知道创建一个对象的方式一般是
var obj = function (name,age) {//创建一个类
    this.name = name;
    this.age=age;
  }
var student= new obg("xiaoming","18");//实例化一个对象

这种方式我理解,就如同我需要一个car,我只需要知道car有一些属性(颜色,名字),然后我就可以直接实例一个car(白色,宝马),然后要用的时候,一目了然,这很“面向对象”,我的对象就是这个白色的宝马。
可是还有一种创建对象的方式:
Object.beget = function (o) {//犀牛书和蝴蝶书上看到的
    var F = function (o) {};//这一步是创建一个对象F
    F.prototype = o ;//这是让它的原型为o?这一步和前面一步是怎样个意思?连起来就晕了
    return new F;//返回F
  };
var Car = {
    name:'',
    color:'whait'
  };
var myCar = Object.beget(Car);
就是代码注释部分,求大神解惑,它是怎样的一个逻辑

阅读 2.6k
1 个回答

先看一下两种形式的对象内部结构

第一种:

clipboard.png

第二种:

clipboard.png

可以看到第二种方式是把你的内容保存到了原型链中,这种方式比较利于后续的继承,使用的技术是寄生组合继承原型链继承相关知识

第二种方式其实是一个工厂模式,并且更具有灵活性,比如说现在需求改了,需要添加车辆的价格,那么用第二种方式的话直接

Object.beget({... price: 250000});

或者

var baseCar = Object.beget({name: 'bmw', color: 'white'});
baseCar.price = 250000;
var myCar = Object.beget(baseCar);

这样还使用到了继承的机制。

clipboard.png

第一种方式需要去修改你定义的类或者要去写继承逻辑。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏