如何将函数分配给 Javascript 对象的属性?

Posted

技术标签:

【中文标题】如何将函数分配给 Javascript 对象的属性?【英文标题】:How do I assign a function to the property of a Javascript object? 【发布时间】:2014-01-16 13:04:47 【问题描述】:

我一直在寻找并努力研究以下示例:

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.logDetails 是 player1 的属性或 player1 的方法。 所以我无法理解作者如何将属性分配给函数。 另外我不明白为什么你会这样写而不是: player1.logDetails=playerDetails(); 我已经尝试过但不起作用。

然后他调用player1.logDetails(),这是一个函数,但没有在任何地方声明。(?)

如果有人可以帮忙? 提前谢谢你

【问题讨论】:

live test case 对于那些感兴趣的人。 javascript 不同于 C# 或 Java。在 Javascript 中,您可以将函数作为参数传递给另一个函数或任何变量。然后按照您在代码中看到的那样调用该函数。 @KhurramHassan 我们也可以使用 Delegate 在 c# 中将函数作为参数传递。 @MillerKoijam 我从来没有说过我们不能在 C# 中将函数作为参数传递。我说 Javascipt 不同于 C# 或 Java,意思是不要将 Javascript 与这些语言混淆,它们的限制是不同的 @KhurramHassan 至于这里的例子:player1.logDetails= playerDetails; 是什么意思,你为什么不使用这个语法:player1.logDetails= playerDetails();。是否有替代方法来编写具有相同功能的代码? 【参考方案1】:

如果代码是这样写的,我打赌你明白了:

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
;

【讨论】:

【参考方案2】:

Javascript 函数与其他值或对象没有什么不同。 您可以将它们分配给您想要的任何东西;您甚至可以将它们作为参数传递。

【讨论】:

【参考方案3】:

我自己还是个新手,但您可以在对象中创建方法作为替代方法。

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();

此外,“定义方法”下方的链接可能有助于回答您的问题。 enter link description here

【讨论】:

【参考方案4】:

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);

【讨论】:

以上是关于如何将函数分配给 Javascript 对象的属性?的主要内容,如果未能解决你的问题,请参考以下文章

将JavaScript函数分配给变量的效果[重复]

如何将从 API 获取的数组分配给 Vue.js 中的数据属性?

如何在javascript中将文本分配给标签?

如何将一个功能的小计分配给另一个功能?

在 JavaScript 中,将类名分配给常规元素和命名空间元素是不是不同?

使用 jQuery 将多个 CSS 类的 Javascript 数组分配给一个元素