我在警告框中获取了功能代码,为什么会这样?

时间:2012-07-31 00:36:44

标签: javascript

当我运行此脚本时,我会在警告框中获取说话功能代码。它应该是“你好!” 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);

2 个答案:

答案 0 :(得分:3)

将最后一行更改为

myMother.speak();

对于接受字符串的函数(如alert()),如果传入函数,则需要使用该函数来表示函数的源代码。因此,当您将myMother.speak传递给alert时,它会获取源代码,因此您会看到结果。

(如果有人可以进一步扩展或提供有用的链接,请随时编辑此答案)

答案 1 :(得分:1)

  

我在警告框中获取了功能代码,为什么会这样?

这就是因为你正在引用一个函数,而不是调用它,似乎alert()可能正在调用参数上的toString()函数,并且在函数引用上调用tostring()似乎将字符串作为字符串返回,因此当您提醒您获取源代码时,虽然这只是一种预感,因为警报似乎是本机实现的,所以我无法真正说明它是如何实现的。

我也不能说这种行为在所有浏览器中都是一致的。