1

当我运行这个脚本时,我在警告框中得到了说话功能代码。应该是“你好!” 不是函数(){警报(“你好!”)};. 我使用 alert 是因为我似乎更喜欢 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);
4

2 回答 2

3

将最后一行更改为

myMother.speak();

对于接受字符串的函数,(如,alert()),如果你传入一个函数,它将把它当作函数的源代码。因此,当您传入 时myMother.speakalert它获取了源代码,因此您看到了结果。

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

于 2012-07-31T00:38:48.277 回答
1

我在警告框中得到了功能代码,这是为什么?

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

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

于 2012-07-31T00:49:36.560 回答