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

查看:64
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆