我的目标是模仿Mongoose模型" class"使用内存存储。以下是可能的示例:
var Book = require("./book");
var book = new Book({
title: "Hello"
});
现在,当我将book
传递给console.log
时,会返回以下输出:
console.log(book); // returns { title: "Hello" }
我创建了一个名为MyBook
的函数来模拟Mongoose模型" class":
function MyBook(doc) {
this.doc = doc;
}
var book = new MyBook({title: "Hello"});
但是当我将book
传递给console.log
时,输出结果不同:
console.log(book); // returns { doc: { title: "Hello" } }
这对我有意义。我正在分配给doc
所以我有一个属性doc
是有意义的。但这不是我想要的。我想要的是一个像Mongoose回归的输出。我分配给doc
因为,当我分配给this
时:
function MyBook(doc) {
this = doc;
}
我收到此错误:
ReferenceError: Invalid left-hand side in assignment
同样,这对我来说很有意义。但问题仍然存在:如何(动态)将给定参数的属性分配给当前对象?
答案 0 :(得分:4)
您可以使用doc
循环遍历for...in
的所有属性:
function MyBook(doc) {
for (var property in doc) {
if (doc.hasOwnProperty(property)) {
this[property] = doc[property];
}
}
}
var book = new MyBook({title: "Hello"});
很快你就能完成Object.assign(this, doc)
。
答案 1 :(得分:2)
您可以使用extend
模块中的util
函数将传递的参数与自this
个对象合并
var extend = require('util')._extend
;
var MyBook = function(options) {
extend(this, options);
};
答案 2 :(得分:0)
您可以使用JavaScripts参数对象。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/arguments
function MyBook() {
this.title = arguments[0];
this.other = arguments[1]
}
var book = new MyBook("Hello", "Other");
console.log(book); // returns - MyBook {title: "Hello", other: "Other"}
虽然这样做,但您需要在MyBook上设置所需的属性。这并不真正匹配您所寻找的“动态”元素,但确实符合您的目标,即“类”的想法