为什么用原型添加新方法无法按预期工作

时间:2018-10-23 19:29:45

标签: javascript class object methods prototype

所以我是自学开发人员。我学到了很多PHP,并开始使用JavaScript。向我介绍了javascript一流的函数以及所有这些。我了解到您可以通过原型将新属性(var或function)添加到类中,该原型来自于我了解的具有其他所有对象(例如变量,函数)的对象。在尝试原型时,我遇到了以下代码问题:

function Fox(color) {
  this.color = color;
}

Fox.prototype.speak = function() {
  console.log('I am ' + this.color);
};

var myFox = new Fox('blue');

window.setTimeout(myFox.speak, 1000);

在这种情况下,this.color是不确定的,我很难理解为什么。它像这样工作,但没有时间延迟。我认为setTimeout不能正常工作是因为它是如何工作的,因为要让function(first class)作为参数而不执行函数(就像放置()一样)。再次不知道为什么它返回蓝色值。

            /* This works but with no time delay: */
            window.setTimeout(myFox.speak(), 1000);
            /* returns blue */

1 个答案:

答案 0 :(得分:-1)

您的问题-如果是第一种情况:您丢失了内容 试试吧:

 function Fox(color) {
                this.color = color;
            }
            Fox.prototype.speak = function() {
                console.log('I am ' + this.color);
            };
            var myFox = new Fox('blue');

 setTimeout(myFox.speak.bind(myFox), 1000);

您还可以在您的方法中使用回调:

 function Fox(color) {
                this.color = color;
            }
            Fox.prototype.speak = function() {
                console.log('I am ' + this.color);
            };
            var myFox = new Fox('blue');

 setTimeout(function(){myFox.speak()}, 1000);