[英]fms: what's the difference between client.prototype.function and clientObj.function()?
我看到人們以兩種方式聲明函數:
1。
application.onConnect = function(clientObj, uid,gameName) {
clientObj.functionname= function() { ... }
}
2。
Client.prototype.functionName = function() { ... }
有什么不同 ?
先前的答案不完整。
第一個示例僅向Client類的特定實例添加方法。 第二個示例將方法添加到所有Class原型。
這種區別對於某些用例非常重要。
例如,如果連接到某個房間的客戶端具有由您的邏輯創建的管理特權,則在onConnect的客戶端實例中,您將僅向admin的用戶客戶端添加方法,否則,在每個admin方法中,您將需要檢查客戶端是否為admin(會很丑)
樣品:
application.isAdminUser = function(cParams) {
if (cParams.username == 'admin') {
return true;
} else {
return false;
}
}
/* bad - people can simulate clients */
application.onConnect = function(client, cParams) {
client.disconnectUser = function(userId) { application.myDisconnect(userId); };
client.allClientsMethod = function() { };
}
/* good */
application.onConnect = function(client, cParams) {
if(this.isAdminUser(cParams)) {
client.disconnectUser = function(userId) { application.myDisconnect(userId); };
}
// this following is applied to all connecting clients
client.allClientsMethod = function() { };
// and can be done also by:
// Client.prototype.allClientsMethod = function() { };
}
如果您不將disonnectUser放入,則可以想象惡意者會偽造一個客戶端,從而使該客戶端斷開您的任何用戶的連接。
我希望這有幫助。
第一個示例將功能添加到創建的客戶端對象。
第二個示例將這些函數添加到將在發出onConnect時創建的類的原型中。
因此實際上是獲得相同結果的兩種方法。
如果我不得不猜測更快的速度,那么我想使用第二個示例會更快一些,因為您需要向類定義中添加函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.