簡體   English   中英

如何將函數分配給 Javascript 對象的屬性?

[英]How do I assign a function to the property of a Javascript object?

我正在尋找並努力解決以下示例:

var player1= {name: "Chris", score: 1000, rank: 1};
var player2= {name: "Kristofer", score: 100000, rank: 2};

function playerDetails(){
alert("The name of the player is "+ this.name + "."+ " His score is : "+ this.score + "and his rank : "+ this.rank);
}
player1.logDetails= playerDetails;
player2.logDetails= playerDetails;

player1.logDetails();
player2.logDetails();

據我所知player1.logDetailsplayer1.logDetails的屬性或 player1 的方法。 所以我無法理解作者如何將屬性分配給函數。 我也不明白你為什么要這樣寫而不是: player1.logDetails= playerDetails(); 我已經嘗試過但不起作用。

然后他調用player1.logDetails()這是一個函數但沒有在任何地方聲明。(?)

如果有人可以幫忙嗎?? 先感謝您

如果代碼是這樣寫的,我打賭你理解它:

var player1 = {
                name: "Chris", 
                score: 1000, 
                rank: 1,
                playerDetails: function() { alert('The name is '+ this.name) }
};

var player2 = {
                name: "Kristofer", 
                score: 10000, 
                rank: 2,
                playerDetails: function() { alert('The name is '+ this.name) }
};

代碼的作者想定義一次“playerDetails()”函數。

以簡化方式顯示這一點的另一種方法是:

var player1 = {
                name: "Chris", 
                score: 1000, 
                rank: 1
};

player1.playerDetails=function() { alert('The name is '+ this.name) }

var player2 = {
                name: "Kristofer", 
                score: 10000, 
                rank: 2
};

player2.playerDetails=function() { alert('The name is '+ this.name) }

所以如果你想通過只編寫一次 playerDetails 函數來優化上面的代碼,它看起來就像你帖子中的代碼。

如果我寫了代碼塊,我可能會這樣寫:(這很容易閱讀)

function playerDetailsFunc() {alert('The name is '+ this.name) }

var player1 = {
                name: "Chris", 
                score: 1000, 
                rank: 1,
                playerDetails: playerDetailsFunc
};

var player2 = {
                name: "Kristofer", 
                score: 10000, 
                rank: 2,
                playerDetails: playerDetailsFunc
};

Javascript 函數與其他值或對象沒有區別。
您可以將它們分配給您想要的任何東西; 您甚至可以將它們作為參數傳遞。

我自己還是個新手,但您可以在對象中創建該方法作為替代方法。

var player1= {name: "Chris", score: 1000, rank: 1, logDetails: playerDetails};
var player2= {name: "Kristofer", score: 100000, rank: 2, logDetails: playerDetails};

function playerDetails(){
console.log("The name of the player is "+ this.name + "."+ " His score is : "+ this.score + "and his rank : "+ this.rank);
}

player1.logDetails();
player2.logDetails();

此外,下面“定義方法”下的鏈接可能有助於回答您的問題。 在此處輸入鏈接描述

 var player1= {name: "Chris", score: 1000, rank: 1}; var player2= {name: "Kristofer", score: 100000, rank: 2}; playerDetails = player => console.log( "The name of the player is "+ player.name + "."+ " His score is : "+ player.score + "and his rank : "+ player.rank); player1.logDetails= playerDetails(player1); player2.logDetails= playerDetails(player2);

player1.logDetails(player1);
player2.logDetails(player2);

如何修復“無法分配給 object 的只讀屬性“導出”'#<object> ' 將第二個 function 添加到 module.exports 時?<div id="text_translate"><p> 不幸的是,我已經被困了大約 5 天了。 我用谷歌搜索過,沒有什么對我有用。 我有一個 utils.js 文件,里面有很多東西可以幫助我。 當我將 function "doesUserContainRoles" 添加到導出時,我的 Chrome 控制台給了我錯誤:</p><blockquote><p> Uncaught TypeError: Cannot assign to read only property 'exports' of object '#&lt;Object&gt;'</p></blockquote><p> 當我刪除 function 時,utils 文件中的所有內容都可以完美運行,根本沒有 0 個問題。 只要我添加 function,我就會收到此錯誤。 我通過以下方式要求 utils 文件:</p><pre class="lang-js prettyprint-override"> const utils = require("../../../utils");</pre><p> 並且沒有與此一起使用的import 。 (我知道module.exports和import不能一起工作)</p><p> 我正在使用什么:</p><ul><li><p> Vue.js @vue/cli 4.5.8</p></li><li><p> Node.js v15.2.0</p></li></ul><h3> 文件:</h3><p> utils.js</p><pre class="lang-js prettyprint-override"> const winston = require("winston"); const { datadog } = require("./credentials.js"); const { createLogger, format, transports } = require('winston'); const base_url = "http://localhost:3001/api/v1" // Winston ~ const httpTransportOptions = { host: datadog.logger.host, path: datadog.logger.path, ssl: datadog.logger.ssl }; const customLevels = { levels: { emergency: 0, alert: 1, critical: 2, error: 3, warn: 4, notice: 5, info: 6, debug: 7, success: 8 }, } const logger = createLogger({ level: 'info', levels: customLevels.levels, exitOnError: false, format: format.json(), transports: [ new transports.Http(httpTransportOptions), ], }); const commonMessages = { accessPage: "User Accessed a Page", restrictedPage: "Attempt at accessing restricted page" } function alertGeneral() { alert("Oops. An error has occurred. Please try again later, If this problem continues. please contact Vinniehat;"), } function doesUserContainRoles(userRoles. containsRoles) { return.;userRoles.some(role =&gt; containsRoles,includes(role)), } module,exports = { logger, commonMessages, base_url, alertGeneral, doesUserContainRoles }</pre><p> 這是錯誤堆棧:</p><pre> Uncaught TypeError: Cannot assign to read only property 'exports' of object '#&lt;Object&gt;' at Module.eval (utils.js?1b23:45) at eval (utils.js:68) at Module../utils.js (app.js:1944) at __webpack_require__ (app.js:854) at fn (app.js:151) at eval (router.js?9883:19) at Module../src/router/router.js (app.js:1812) at __webpack_require__ (app.js:854) at fn (app.js:151) at eval (main.js:34)</pre><p> 我也嘗試使用export default 。 這樣做時,我的前端工作。 網站加載沒有錯誤。 不過,我的后端使用 Express.js 運行,然后引發錯誤:</p><pre> Unhandled rejection E:\Development\Websites\iceberg-gaming-website\utils.js:45 export default { ^^^^^^ SyntaxError: Unexpected token 'export' at wrapSafe (node:internal/modules/cjs/loader:1018:16) at Module._compile (node:internal/modules/cjs/loader:1066:27) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1131:10) at Module.load (node:internal/modules/cjs/loader:967:32) at Function.Module._load (node:internal/modules/cjs/loader:807:14) at Module.require (node:internal/modules/cjs/loader:991:19) at require (node:internal/modules/cjs/helpers:92:18) at Object.&lt;anonymous&gt; (E:\Development\Websites\iceberg-gaming-website\express\modules\user.js:9:15) at Module._compile (node:internal/modules/cjs/loader:1102:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1131:10) at Module.load (node:internal/modules/cjs/loader:967:32) at Function.Module._load (node:internal/modules/cjs/loader:807:14) at Module.require (node:internal/modules/cjs/loader:991:19) at require (node:internal/modules/cjs/helpers:92:18) at E:\Development\Websites\iceberg-gaming-website\express\express.js:27:27 at tryCatcher (E:\Development\Websites\iceberg-gaming-website\node_modules\bluebird\js\release\util.js:16:23)</pre></div></object>

[英]How do I fix 'Cannot assign to read only property 'exports' of object '#<Object>' when adding a 2nd function to module.exports?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何將實函數分配給javascript對象以用作回調? JavaScript將函數分配給對象屬性 如何修復“無法分配給 object 的只讀屬性“導出”'#<object> ' 將第二個 function 添加到 module.exports 時?<div id="text_translate"><p> 不幸的是,我已經被困了大約 5 天了。 我用谷歌搜索過,沒有什么對我有用。 我有一個 utils.js 文件,里面有很多東西可以幫助我。 當我將 function "doesUserContainRoles" 添加到導出時,我的 Chrome 控制台給了我錯誤:</p><blockquote><p> Uncaught TypeError: Cannot assign to read only property 'exports' of object '#&lt;Object&gt;'</p></blockquote><p> 當我刪除 function 時,utils 文件中的所有內容都可以完美運行,根本沒有 0 個問題。 只要我添加 function,我就會收到此錯誤。 我通過以下方式要求 utils 文件:</p><pre class="lang-js prettyprint-override"> const utils = require("../../../utils");</pre><p> 並且沒有與此一起使用的import 。 (我知道module.exports和import不能一起工作)</p><p> 我正在使用什么:</p><ul><li><p> Vue.js @vue/cli 4.5.8</p></li><li><p> Node.js v15.2.0</p></li></ul><h3> 文件:</h3><p> utils.js</p><pre class="lang-js prettyprint-override"> const winston = require("winston"); const { datadog } = require("./credentials.js"); const { createLogger, format, transports } = require('winston'); const base_url = "http://localhost:3001/api/v1" // Winston ~ const httpTransportOptions = { host: datadog.logger.host, path: datadog.logger.path, ssl: datadog.logger.ssl }; const customLevels = { levels: { emergency: 0, alert: 1, critical: 2, error: 3, warn: 4, notice: 5, info: 6, debug: 7, success: 8 }, } const logger = createLogger({ level: 'info', levels: customLevels.levels, exitOnError: false, format: format.json(), transports: [ new transports.Http(httpTransportOptions), ], }); const commonMessages = { accessPage: "User Accessed a Page", restrictedPage: "Attempt at accessing restricted page" } function alertGeneral() { alert("Oops. An error has occurred. Please try again later, If this problem continues. please contact Vinniehat;"), } function doesUserContainRoles(userRoles. containsRoles) { return.;userRoles.some(role =&gt; containsRoles,includes(role)), } module,exports = { logger, commonMessages, base_url, alertGeneral, doesUserContainRoles }</pre><p> 這是錯誤堆棧:</p><pre> Uncaught TypeError: Cannot assign to read only property 'exports' of object '#&lt;Object&gt;' at Module.eval (utils.js?1b23:45) at eval (utils.js:68) at Module../utils.js (app.js:1944) at __webpack_require__ (app.js:854) at fn (app.js:151) at eval (router.js?9883:19) at Module../src/router/router.js (app.js:1812) at __webpack_require__ (app.js:854) at fn (app.js:151) at eval (main.js:34)</pre><p> 我也嘗試使用export default 。 這樣做時,我的前端工作。 網站加載沒有錯誤。 不過,我的后端使用 Express.js 運行,然后引發錯誤:</p><pre> Unhandled rejection E:\Development\Websites\iceberg-gaming-website\utils.js:45 export default { ^^^^^^ SyntaxError: Unexpected token 'export' at wrapSafe (node:internal/modules/cjs/loader:1018:16) at Module._compile (node:internal/modules/cjs/loader:1066:27) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1131:10) at Module.load (node:internal/modules/cjs/loader:967:32) at Function.Module._load (node:internal/modules/cjs/loader:807:14) at Module.require (node:internal/modules/cjs/loader:991:19) at require (node:internal/modules/cjs/helpers:92:18) at Object.&lt;anonymous&gt; (E:\Development\Websites\iceberg-gaming-website\express\modules\user.js:9:15) at Module._compile (node:internal/modules/cjs/loader:1102:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1131:10) at Module.load (node:internal/modules/cjs/loader:967:32) at Function.Module._load (node:internal/modules/cjs/loader:807:14) at Module.require (node:internal/modules/cjs/loader:991:19) at require (node:internal/modules/cjs/helpers:92:18) at E:\Development\Websites\iceberg-gaming-website\express\express.js:27:27 at tryCatcher (E:\Development\Websites\iceberg-gaming-website\node_modules\bluebird\js\release\util.js:16:23)</pre></div></object> 如何在javascript中將對象分配給類屬性 如何將對象中的屬性分配給javascript中同一對象中某個屬性的值? 如何在打字稿中為對象屬性分配功能? javascript:將 object function 返回值分配給 object 屬性 當我將 object 分配給 object 的屬性時,該屬性會變成 object 嗎? 如果是這樣,我如何通過第二個訪問第一個 object? JavaScript:如何在對象鍵中引用對象屬性? 如何調用對象的函數,就像它是另一個對象的屬性一樣?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM