繁体   English   中英

此JavaScript函数如何工作?

[英]How does this JavaScript function work?

我是javascript的新手。 在下面的模板和JS函数中,我试图显示person1名称和person2名称并显示它们是否相等。

<!DOCTYPE html>
<html>
<head>
<script>
function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function(){
        alert("in function" + this.name);
    };
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");
alert(person1.sayName());
alert(person2.sayName());
alert(person1.sayName() == person2.sayName() );
</script>
</head>
<body>
<div>

</div>
</body>
</html> 

但是我正在逐一收到这些警报。

in functionNicholas

undefined

in functionGreg

undefined

in functionNicholas

in functionGreg

true

请帮我控制流程。 如果这个问题太愚蠢和基本,请原谅我。 谢谢

我不知道为什么我两次收到未定义的警报。

它发出undefined警报,因为alert不会返回任何东西,或者说您的函数(即person1.sayName()不会返回任何东西,它只是发出警报。

根据您的命名约定, sayName是正确的,因为它通过sayName警报,打印,显示或类似内容来完成其工作,但不必返回任何内容,而只是不返回任何内容。 因此person1.sayName() == person2.sayName()为true,因为undefined == undefined

当您这样做时:

alert(person1.sayName());

发生以下情况:

  1. 它调用person1.sayName()
  2. 这将调用alert('in function' + this.name); ,这会in functionNicholas上使尼古拉斯受到警告。
  3. sayName函数返回。 由于没有return somevalue语句,因此它返回undefined
  4. 现在,您使用返回的值调用alert ,所以就像alert(undefined) ,这就是为什么看到undefined警报的原因。

如果您这样做:

alert(person1.sayName() == person2.sayName());

它调用每个人的sayName方法,该方法会提醒他们的名字。 它们每个都返回undefined ,因此您可以执行以下操作:

alert (undefined == undefined);

由于它们相等,因此这将警告为true

您应该使用:

    function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function(){
        alert("in function" + this.name);
    };
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");
person1.sayName();
person2.sayName();

sayName()函数不返回任何值,默认返回值是未定义的,因此您实际上在做的是将一个未定义的值与另一个未定义的值进行比较

var x = person1.sayName()

// x is undefined

您可以更改sayName()以在警报后返回当前名称:

this.sayName = function(){
    alert("in function" + this.name);
    return this.name;
};

每次运行sayName()函数时,都将在该函数中创建一个警报,然后返回未定义。 JavaScript总是返回一些东西,如果未指定任何内容,则它是未定义的。

您首先为Nicholas打印sayName,这会提醒他的名字,然后返回undefined。 然后,您警告返回的值(未定义)。

重复格雷格。

最后一行比较两者,首先警告它们的两个名称,然后比较两个返回的函数(换句话说,undefined == undefined,它为TRUE)。 然后会警告True。

其他答案是正确的。 另外,为了进行比较,在您的最后一个警报中,我想您想检查这些人的姓名是否相同。

alert(person1.name === person2.name);

为此,您可以使用上方的“点语法”访问每个对象的name属性。 === (三等号)运算符是使用这种语言进行比较的最佳运算符。 您应该更喜欢标准[unreliable] ==

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM