的實例我有一個命名空間發電機,看起來像這樣:(作爲一種需求,它也需要有原型對象額外和默認)。參數在一個命名空間
function generateNamespace(staticMethods, prototypeMethods){
var namespace = function(){}; //create namespace
/**add staticMehods and prototypeMethods to namespace*/
extend(namespace, staticMethods); //extend function from NojeJS
extend(namespace.prototype, prototypeMethods);
//create extra and default objects.
namespace.prototype.default = namespace.prototype.default || {};
namespace.prototype.extra = namespace.prototype.extra || {};
return namespace;
}
的想法是產生這樣的命名空間:
var protObj = {id: function(){
console.log("id");
}
}
var myNameSpace = generateNamespace({}, protObj);
當我實例:
var instanceOfmyNameSpace = new myNameSpace();
結果中包含的功能id
和對象default
,和extra
。
但是,如果我運行:
var instance2 = new myNameSpace({test: "foo"});
然後:assert.equal(instance2, instanceOfmyNameSpace) \\=true
這樣就意味着給定的對象只是被忽略(?)。
例如,我需要做些什麼才能將該對象與default
合併在一起?完美的輸入/輸出將是:
//input
var instance2 = new myNameSpace({test: "foo"});
//output
console.log(instance2.default.test) \\-> "foo"
UPDATE,ANSWER
所有我需要做的是創造namespace
爲constructor
,然後添加staticMethods
和prototypeMethods
它:
var extend = require('util')._extend;
function generateNamespace(staticMethods, prototypeMethods){
var namespace = function(defaults, extras){
this.default = extend({}, this.constructor.default, defaults);
this.extra = extend({}, this.constructor.extra, extras);
}
extend(namespace, staticMethods);
extend(namespace.prototype, prototypeMethods);
return namespace;
}
只是說明:你通常不會實例化一個名稱空間。命名空間通常用於封裝可實例化或其他獨立成員(值,函數等)。它看起來像你真正想要的是創建一個類,而不是命名空間。 – doogle
它看起來並不像'prototype'在'namespace.prototype.default = prototype.default ||'行上定義。 {}' – doogle
我已經更新過了。但這不是問題。即使我創建了一個類而不是命名空間,是否可以幫助我將在實例化時賦予的方法'default'與'prototypes'內的'default'對象合併? –