我知道创建一个对象的方式一般是
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);
就是代码注释部分,求大神解惑,它是怎样的一个逻辑
先看一下两种形式的对象内部结构
第一种:
第二种:
可以看到第二种方式是把你的内容保存到了原型链中,这种方式比较利于后续的继承,使用的技术是
寄生组合继承
,原型链继承相关知识第二种方式其实是一个工厂模式,并且更具有灵活性,比如说现在需求改了,需要添加车辆的价格,那么用第二种方式的话直接
或者
这样还使用到了继承的机制。
第一种方式需要去修改你定义的类或者要去写继承逻辑。