javascript - 获取 Bookshelf.js 模型时使用 "new"有什么区别?

标签 javascript promise bookshelf.js knex.js

Bookshelf.js 文档有带有“new”和没有“new”的代码示例:

在这里http://bookshelfjs.org/#Model-instance-hasMany

let Author = bookshelf.Model.extend({
  tableName: 'authors',
  books: function() {
    return this.hasMany(Book);
  }
});

// select * from `authors` where id = 1
// select * from `books` where author_id = 1
Author.where({id: 1}).fetch({withRelated: ['books']}).then(function(author) {
  console.log(JSON.stringify(author.related('books')));
});

但是在这里http://bookshelfjs.org/#Model-instance-fetch

let Book = bookshelf.Model.extend({
  tableName: 'books',
  editions: function() {
    return this.hasMany(Edition);
  },
  chapters: function{
    return this.hasMany(Chapter);
  },
  genre: function() {
    return this.belongsTo(Genre);
  }
})

new Book({'ISBN-13': '9780440180296'}).fetch({
  withRelated: [
    'genre', 'editions',
    { chapters: function(query) { query.orderBy('chapter_number'); }}
  ]
}).then(function(book) {
  console.log(book.related('genre').toJSON());
  console.log(book.related('editions').toJSON());
  console.log(book.toJSON());
});

那么有什么区别呢?

最佳答案

没有区别。

Model.fetchModel.queryModel.whereModel.fetchAll 是以下内容的简写:

Model[method] = function(...args) {
  return Model.forge()[method](...args);
}

Model.forgenew的简写。

Model.forge = function(...args) {
  return new this.constructor(...args);
}

关于javascript - 获取 Bookshelf.js 模型时使用 "new"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33635271/

相关文章:

javascript - 在Bower中找到冲突的包,找到合适的包安装

javascript - 有没有办法检查源是否被订阅?

javascript - Bookshelf.js/Knex.js 嵌套在单个查询中的位置

node.js - model.fetch 与相关模型 bookshelfjs

node.js - Bookshelf.js - 如何保存多对多关系?

javascript - 用于验证 Android 应用程序 ID 的 Android 正则表达式不完全正确

javascript - ../path 不是重定向页面

javascript - Jquery Deferred 没有达到最后.then

javascript - Bluebird promise 取消

javascript - then() 函数是否返回反射(reflect)先前 promise 结果的 promise ?