Lodash - 使用_.create()的价值是什么

时间:2015-03-10 16:08:25

标签: javascript lodash

Lodash库中,使用_.create()处理类和实例与其他更传统的方法相比有什么价值?

Docs for create

3 个答案:

答案 0 :(得分:2)

我认为create()不是要替换现有的JavaScript继承/原型机制。根据我的经验,将一种类型的集合映射到另一种类型时非常方便:

function Circle(x, y) {
    this.x = x;
    this.y = y;
}

function Square(x, y) {
    this.x = x;
    this.y = y;
}

Square.prototype.coords = function() {
    return [ this.x, this.y ];
}

var collection = [
    new Circle(1, 1),
    new Circle(2, 2),
    new Circle(3, 3),
    new Circle(4, 4)
];

_(collection)
    .map(_.ary(_.partial(_.create, Square.prototype), 1))
    .invoke('coords')
    .value();
// →
// [
//   [ 1, 1 ],
//   [ 2, 2 ],
//   [ 3, 3 ],
//   [ 4, 4 ]
// ]

答案 1 :(得分:1)

我认为这是一种便利。在执行JS中的经典继承模型的常见任务时,它更简洁一些。

本机:

var User = function() {};

User.prototype = Object.create(Person.prototype);

Object.assign(User.prototype, {
  constructor: User,

  ...other stuff
});

_.create

var User = function() {};

User.prototype = _.create(Person.prototype, {
  constructor: User,

  ...other stuff
});

写起来要少一点。

答案 2 :(得分:0)

我在阅读一些lodash代码后看到的最大区别是Object.create第二个参数,采用object.defineProperty arg的格式,即属性描述符,而_.create只复制所有自己或继承的来自对象的可枚举属性(依赖于nativeKeysIn)。

它主要简化经典对象定义。