- <script>
- function fooConstructor() {
- this.variable = 1;
- }
- function makeAnonymousFunction() {
- return function() {
- this.gooValue = 2;
- };
- }
- fooConstructor(); // invoke a function that looks like a constructor
- makeAnonymousFunction()(); // invoke an anonymous function
- document.write(variable + "<br />");
- document.write(window.gooValue + "<br />");
- var obj = new fooConstructor(); // invoke a constructor with "new"
- document.write(obj.variable + "<br />");
- </script>
- <!-- displays:
- 1
- 2
- 1
- -->
<script>
function fooConstructor() {
this.variable = 1;
}
function makeAnonymousFunction() {
return function() {
this.gooValue = 2;
};
}
fooConstructor(); // invoke a function that looks like a constructor
makeAnonymousFunction()(); // invoke an anonymous function
document.write(variable + "<br />");
document.write(window.gooValue + "<br />");
var obj = new fooConstructor(); // invoke a constructor with "new"
document.write(obj.variable + "<br />");
</script>
<!-- displays:
1
2
1
-->
虽然我们在第一次调用fooConstructor()时并没有以"object.method()"的形式来调用,它实际上等价于window.fooConstructor()。于是我们把window对象(浏览器DOM里的"全局"对象)隐式传给了所调用的函数,在fooConstructor里this就指向了window,并为window对象创建了variable属性,赋值为1。
makeAnonymousFunction()()的调用是为了演示这个this的指向与嵌套层次的无关性。makeAnonymousFunction()返回了一个函数对象,不过我们没有为这个对象给予一个名字,而是直接调用了它。与前一例一样,这个调用为window对象创建了一个名为gooValue的属性,并赋值为2。
然后我们演示了以new运算符来创建新对象的状况。这个很普通没什么需要解释的了~