如何解决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 举报,一经查实,本站将立刻删除。