当我运行此脚本时,我会在警告框中获取说话功能代码。它应该是“你好!” not function(){alert(“Hello!”)}; 。我使用警报,因为我似乎更喜欢它在console.log上学习。该脚本在没有说话功能的情况下工作正常。
function person(firstname,lastname,age,eyecolor) {
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.newlastname=newlastname;
this.speak=function(){alert("Hello!")};
}
var myFather=new person("John", "Doe", 45, "blue");
var myMother=new person("Sally","Rally", 48,"green");
function newlastname(new_lastname) {
this.lastname=new_lastname;
}
myMother.newlastname("Doe");
alert(myMother.lastname);
alert(myMother.speak);
答案 0 :(得分:3)
将最后一行更改为
myMother.speak();
对于接受字符串的函数(如alert()
),如果传入函数,则需要使用该函数来表示函数的源代码。因此,当您将myMother.speak
传递给alert
时,它会获取源代码,因此您会看到结果。
(如果有人可以进一步扩展或提供有用的链接,请随时编辑此答案)
答案 1 :(得分:1)
我在警告框中获取了功能代码,为什么会这样?
这就是因为你正在引用一个函数,而不是调用它,似乎alert()
可能正在调用参数上的toString()
函数,并且在函数引用上调用tostring()
似乎将字符串作为字符串返回,因此当您提醒您获取源代码时,虽然这只是一种预感,因为警报似乎是本机实现的,所以我无法真正说明它是如何实现的。
我也不能说这种行为在所有浏览器中都是一致的。