Javascript 如何将参数属性指定给self? 目标

Javascript 如何将参数属性指定给self? 目标,javascript,node.js,Javascript,Node.js,我的目标是使用内存存储模拟模型“类”。下面是一个可能的示例: var Book = require("./book"); var book = new Book({ title: "Hello" }); 现在,当我将book传递给例如console.log时,将返回以下输出: console.log(book); // returns { title: "Hello" } 问题 我创建了一个名为MyBook的函数,该函数模拟Mongoose模型“class”: 但是当我将book传递到c

我的目标是使用内存存储模拟模型“类”。下面是一个可能的示例:

var Book = require("./book");
var book = new Book({
  title: "Hello"
});
现在,当我将
book
传递给例如
console.log
时,将返回以下输出:

console.log(book); // returns { title: "Hello" }
问题 我创建了一个名为MyBook的函数,该函数模拟Mongoose模型“class”:

但是当我将
book
传递到
console.log
时,输出是不同的:

console.log(book); // returns { doc: { title: "Hello" } }
这对我来说很有意义。我正在分配给
doc
,因此我有一个属性
doc
。但这不是我想要的。我想要的是像Mongoose返回的一样的输出。我分配给
文档
是因为,当我分配给
时:

function MyBook(doc) {
  this = doc;
}
我得到这个错误:

ReferenceError: Invalid left-hand side in assignment

同样,这对我来说是有意义的。但问题仍然存在:如何(动态)将给定参数的属性分配给当前对象?

您可以使用
for…in
循环迭代
文档的所有属性:

function MyBook(doc) {
  for (var property in doc) {
    if (doc.hasOwnProperty(property)) {
      this[property] = doc[property];
    }
  }
}

var book = new MyBook({title: "Hello"});

很快您就可以这样做了。

您可以使用
for…in
循环迭代
doc
的所有属性:

function MyBook(doc) {
  for (var property in doc) {
    if (doc.hasOwnProperty(property)) {
      this[property] = doc[property];
    }
  }
}

var book = new MyBook({title: "Hello"});

很快您就可以这样做了。

您可以使用
util
模块中的
extend
函数将传递的参数与self
this
对象合并

var extend = require('util')._extend
;

var MyBook = function(options) {
    extend(this, options);
};

您可以使用
util
模块中的
extend
函数将传递的参数与self
this
对象合并

var extend = require('util')._extend
;

var MyBook = function(options) {
    extend(this, options);
};

您可以使用JavaScripts参数对象


虽然这样做,但您需要在MyBook上设置所需的属性。这与您正在寻找的“动态”元素并不匹配,但确实符合您的目标,即“类”的概念。您可以使用JavaScripts arguments对象

虽然这样做,但您需要在MyBook上设置所需的属性。这并不真正符合你所寻找的“动态”元素,但符合你的目标,即“类”的概念