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
函数将传递的参数与selfthis
对象合并
var extend = require('util')._extend
;
var MyBook = function(options) {
extend(this, options);
};
您可以使用util
模块中的extend
函数将传递的参数与selfthis
对象合并
var extend = require('util')._extend
;
var MyBook = function(options) {
extend(this, options);
};
您可以使用JavaScripts参数对象
虽然这样做,但您需要在MyBook上设置所需的属性。这与您正在寻找的“动态”元素并不匹配,但确实符合您的目标,即“类”的概念。您可以使用JavaScripts arguments对象
虽然这样做,但您需要在MyBook上设置所需的属性。这并不真正符合你所寻找的“动态”元素,但符合你的目标,即“类”的概念