簡體   English   中英

fms:client.prototype.function和clientObj.function()有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM