gpt4 book ai didi

JavaScript 对象的函数不返回

转载 作者:行者123 更新时间:2023-11-29 21:06:25 26 4
gpt4 key购买 nike

我有一个关于 JavaScript 的问题!我已经学习了几天 JavaScript,但这并不难,因为我已经掌握了很多 Java 知识。到目前为止,我已经编程了很长时间。我使用对象,我想为对象添加一个函数。但是那个函数不能正常工作......代码:

<!DOCTYPE html>

<html>

<head>
<script type="text/javascript">

function person(name){
this.name = name;
}

function printName(){
return this.name;
}

var joza = new person("Josip");


</script>
</head>
<body>
<script type="text/javascript">
document.write(joza.printName());
</script>
</body>

</html>

所以这段代码应该使用对象的函数并打印出它的名字...但是...我得到的只是一个空白网页!请帮忙!!谢谢!!

最佳答案

您得到了一些残酷的答案,但似乎缺少带有词法闭包的答案。所以你在这里:

function Person(name){
this.printName=function(){
console.log(name);
};
}
test=new Person("John");
test.printName();

关键是 JavaScript 函数保留了声明它们的环境。所以这里的内部函数可以访问外部函数的局部变量,即使外部函数不再运行。实际上它类似于从 Java 中的匿名内部类访问 final 局部变量,只是这些变量不必是最终的(因此完全可以提供一个 setName 方法,它会改变相同的名称变量)。

对于这个特定的用例来说,这不是很重要/有趣,但这是一种常见的方式,例如如何将参数获取到回调方法中。

最好的混淆部分:

您的原始代码也可以使用。 JavaScript 对“this”不是很挑剔,你可以在任何对象上调用任何方法:

function Person(name){
this.name=name;
}
function printName(){
console.log(this.name);
}
test=new Person("Jane");
printName.call(test);

函数是对象,它们有一个call 方法。其中第一个参数设置 this,其余参数仅作为方法本身的参数传递。为了完整起见:还有一个 apply 方法,其中函数的参数作为数组传递。

这在这里也不是很重要,但是您应该记住的是 this 不一定是您期望的对象。再次回调方法:如果您使用对象方法作为回调,当浏览器调用它时,this 通常是 window 对象。

关于JavaScript 对象的函数不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43835581/

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