【问题标题】:Objects, prototypal inheritance, and a failing function [duplicate]对象、原型继承和失败的函数[重复]
【发布时间】:2017-04-06 11:32:20
【问题描述】:

在尝试转向一些中级/高级 Javascript 概念时,我遇到了一个问题。在下面的代码中,对象原型和创建的对象似乎运行良好。但是当我尝试在函数'winner'中使用它们时,无论他们的分数如何,结果总是将获胜者声明为第二个参数传递。在这里,Mike 的得分 (395) 比 Peter (206) 高,应该被宣布为获胜者。此外,控制台正在记录消息“Peter 以 function () { 返回 (this.age * 5) + this.height; }”。

任何帮助理解我做错了什么将不胜感激。

var player = {
    name: 'Default',
    age: 'Default',
    height: 'Default',
    score: function() {
        return (this.age * 5) + this.height;
    }
}
    
var Mike = Object.create(player);
Mike.name = 'Mike';
Mike.age = 67;
Mike.height = 60;


var Peter = Object.create(player);
Peter.name = 'Peter';
Peter.age = 30;
Peter.height = 56;


var winner = function(player1, player2) {
    var player1score = player1.score;
    var player2score = player2.score;
    
    if(player1score > player2score) {
        console.log(player1.name + ' wins with a score of ' + player1.score);
    } else {
        console.log(player2.name + ' wins with a score of ' + player2.score);
    }
}

winner(Mike, Peter);
winner(Peter, Mike);

【问题讨论】:

  • 既然 score 是一个函数,你可以这样称呼它:player1.score()

标签: javascript function object


【解决方案1】:

替换

var player1score = player1.score;
var player2score = player2.score;

var player1score = player1.score();
var player2score = player2.score();

你必须调用函数,如果你只写player1.score你会得到函数体。

【讨论】:

  • 愚蠢的错误。我知道它会是这样的。谢谢!
猜你喜欢
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 2020-12-28
  • 2012-01-06
相关资源
最近更新 更多