<!DOCTYPE html>
<html>
<body>
<script>
function person(firstname, lastname, age, eyecolor) {
this.firstname = firstname;
this.lastname = lastname;
this.age = age;
this.eyecolor = eyecolor;
}
myFather = new person("Bill", "Gates", 56, "blue");
document.write(myFather.firstname + " is " + myFather.age + " years old.");
</script>
</body>
</html>
基本只有 @jacklau 的答案答到了点上,其它的要么卖萌,要么自己没理解,要么无法说出来让别人理解。
自己不知道不要紧,最怕自己知道的是错的,更怕的是把错误的东西再教给别人,这是我看到这个答案之后感到很害怕的地方,因此也特意写一下。
首先,
this
是一个语言中的关键字,这里我们假设不懂英语,不知道它的中文意思是当前、这个之类的,它就是一个对象。this
这个对象是谁取决于函数被调用的方式。在JavaScript中,函数有四种调用方式:func()
,此时函数中的this
在ES3/ES5非严格模式下为全局对象,在浏览器中即为window
obj.func()
,此时函数中的this
为obj
apply
/call
调用,如obj1.func.apply(obj2)
,此时函数中的this
为apply
/call
的第一个参数,如前例中为obj2
constructor
)调用,如new func()
,这种情况下this
为一个新的对象,假设叫它为obj
,默认情况(func()
没有使用return
显式返回对象的情况下)下obj
会作为new func()
的结果被返回你的例子即这里说的第四种情况,
person()
是作为一个构造函数被调用的,此时相当于:所以看这句
相当于在
person()
被调用时新建了一个对象,然后分别对对象的各属性赋值,最后返回这个新对象,也就是这些赋值最后给了myFather
。