微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript中是否有相等的符号?

如何解决JavaScript中是否有相等的符号?

我是JavaScript的新手,我正在努力了解如何实现

function Person(age,name,gender) {
    this.name = name;
    this.age = age;
    this.gender = gender;
}

有什么不同
function Person(age,gender) {
    name = this.name;
    age = this.age;
    gender = this.gender;
}

由于使用了第一个版本的代码,一切顺利,而且在我创建时

var Bob = new Person(30,"Bob","male");

后执行

document.getElementById("demo").innerHTML = Bob.name;

它成功打印“鲍勃”。但是,当我运行第二版代码时,却无法定义。为什么或在等号的哪一侧重要?

解决方法

当您调用带有new的函数时,其中的this将引用实例化的对象-对于您的代码,这就是Bob。

使用.引用对象的属性,因此

this.name = name;

name变量名中的值分配给要实例化的name对象的Bob属性。

相反,

name = this.name;

将实例化对象的name属性中当前的值分配给范围内的name变量。实例化的对象开始为空,因此this.name最初包含undefined。将值分配给name变量会将其设置为undefined

<Some Reference> = <Some Value>

<Some Value>放入<Some Reference>

,

在第一个版本中

function Person(age,name,gender) {
    this.name = name;
    this.age = age;
    this.gender = gender;
}

您正在为Person定义一个构造函数,然后该构造函数将返回包含您通过this.thing设置并设置的信息的实例。

在第二版中

function Person(age,gender) {
    name = this.name;
    age = this.age;
    gender = this.gender;
}

您要在内部重新分配变量,但不要在实际创建的对象中设置任何内容

name = this.name; // name = undefined,as this.name was never set
,
function Person(age,gender) {
    this.name = name;
    this.age = age;
    this.gender = gender;
}

在您的构造函数中,年龄,姓名和性别变量是指实例创建过程中给出的值。

例如在:

Person p1 = new Person(21,"Bill",'m')

构造函数的年龄为21岁,姓名为“ Bill”,性别为'm'

在构造函数中,this.name指定您所引用的是该类的新实例(p1)的变量,而不是参数中的给定值。

因此,给定的值存储在对象p1的变量中。

现在,如果您尝试像在第二个构造函数中那样尝试复制p1(一个新创建的对象)的变量的值,则显然会得到未定义的错误,因为没有将任何值添加到p1中的变量。

,
function Person(age,gender) {
 /*this "is pointing to this function(countructor fn) 
  so when you asign value to this.name  = name
  it takes the argument name and put it to this 
 object's name property
*/
    this.name = name;
    this.age = age;
    this.gender = gender;
}

在第二个版本中,您正在为参数“名称”分配值,并将其设置为函数中不存在的this.name(this) 这就是为什么new Person(24,“ foo”,“ male”)。name未定义的原因(您尚未将属性名称设置为该对象,而只是将值赋给了name参数)

function Person(age,gender) {

    name = this.name;
    age = this.age;
    gender = this.gender;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。