[英]Function call from within nested object failing
在下面的代碼中,我希望通過構造函數提供泛型函數。 該對象用於處理對API的調用。 但是,如果我從events.POST調用this._isEmpty(obj),則它總是返回false。 放置_isEmpty()函數的主體確實可以得到所需的結果。 我該如何解決? 當然,歡迎提供任何有關改進此結構的技巧。 我在SO上查找了一些類似的問題,但發現的問題/答案沒有類似的嵌套。
我打以下電話:
var assystBridge = new global.assystBridge();
response.setStatus(assystBridge.events.POST(request, response));
賓語:
var assystBridge = Class.create();
assystBridge.prototype = {
initialize: function() {
// Generic functions go here
function _isEmpty(obj){
// Checks whether an object has properties
// Used for checking whether any data was posted or not
// Returns true or false
return Object.keys(obj).length === 0;
}
},
events: {
POST: function(request, response){
var data = request.body.data;
var responseText = '';
if(this._isEmpty(data)){
//if(Object.keys(data).length === 0){
response.setBody({"response":"NO data was posted", "data": data});
return 400;
} else {
return 201;
}
},
GET: function(request, response){
},
DELETE: function(request, response){
}
},
type: 'assystBridge'
};
如果將通用函數移出initialize()
方法,並使其成為原型的屬性之一,則可以通過assystBridge.prototype._isEmpty()
引用它。
例如:
assystBridge.prototype = {
_isEmpty: function(obj) {
// Checks whether an object has properties
// Used for checking whether any data was posted or not
// Returns true or false
return Object.keys(obj).length === 0;
},
events: {
POST: function(request, response){
var data = request.body.data;
var responseText = '';
if(assystBridge.prototype._isEmpty(data)){
response.setBody({"response":"NO data was posted", "data": data});
return 400;
} else {
return 201;
}
},
},
type: 'assystBridge'
};
除了已經說過的同時也被接受了,您甚至可以更進一步,為assystBridge
創建工廠,從而更好地控制適當的處理函數范圍...
var createAssystBridge = (function () { // - immediately invoked function expression
// acting as a generator for a factory that
// will be returned, thus creating a closure ...
// ... due to shared code, that will be preserved within this closure.
function isEmpty(obj) {
// Checks whether an object has properties
// Used for checking whether any data was posted or not
// Returns true or false
return Object.keys(obj).length === 0;
}
function postData(request, response) {
var data = request.body.data;
var responseText = '';
if (isEmpty(data)){
response.setBody({"response":"NO data was posted", "data": data});
return 400;
} else {
return 201;
}
}
function getData(request, response) {
}
function deleteData(request, response) {
}
function initializeAssystBridge() {
}
// returning the factory
return function assystBridgeFactory() {
var
assystBridge = Class.create();
//assystBridge = Object.create({});
assystBridge.prototype = { // - assign shared code
initialize: initializeAssystBridge, // with every call
events: { // of this factory.
POST : postData, //
GET : getData, //
DELETE : deleteData //
},
type: 'assystBridge'
};
return assystBridge;
};
}());
var assystBridge = createAssystBridge();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.