javascript - 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);
就是代码注释部分,求大神解惑,它是怎样的一个逻辑
先看一下两种形式的对象内部结构
第一种:
第二种:
可以看到第二种方式是把你的内容保存到了原型链中,这种方式比较利于后续的继承,使用的技术是寄生组合继承
,原型链继承相关知识
第二种方式其实是一个工厂模式,并且更具有灵活性,比如说现在需求改了,需要添加车辆的价格,那么用第二种方式的话直接
Object.beget({... price: 250000});
或者
var baseCar = Object.beget({name: 'bmw', color: 'white'});
baseCar.price = 250000;
var myCar = Object.beget(baseCar);
这样还使用到了继承的机制。
第一种方式需要去修改你定义的类或者要去写继承逻辑。
这篇关于javascript - JS创建对象的另一种方法是如何理解的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!