gpt4 book ai didi

javascript - Javascript 类问题

转载 作者:行者123 更新时间:2023-11-30 08:05:13 25 4
gpt4 key购买 nike

我正在研究 javascript,所以这听起来可能是一个微不足道的问题。在这样的一段代码中:

function timeFunction(fn, nameOfFn){
var start = Date.now();
fn();
var end = Date.now();
var time = end - start;
console.log(nameOfFn + ' took ' + time + 'ms');
}

function Person(name){
this.name = name;
this.sayName = function(){
console.log(this.name);
}
}

var bob = new Person('bob');
timeFunction(bob.sayName,'sayName');

输出是:

result
sayName took 7ms

(每次运行代码的时间都会不同)

不确定“结果”的来源以及为什么未显示“Bob”。

最佳答案

在您的 sayName() 函数中,this 不是您所期望的。它实际上是 window,因此您正在记录 window.name 属性(在您的情况下恰好是“结果” - 我猜您正在测试您的代码jsfiddle?)。

那是因为 JavaScript 中的 this 是根据函数的调用方式设置的,它不会自动成为函数“属于”的任何对象。 (事实上​​,函数根本不真正“属于”对象——你的 bob 对象不“拥有”.sayName(),它只是有一个引用到它。)

MDN 解释这个 in detail .

让您的代码按照您期望的方式运行的一种方法是使用 .bind() method :

timeFunction(bob.sayName.bind(bob),'sayName');

关于javascript - Javascript 类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19246139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com