JavaScript 自测题2

this的取值

在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境。

this的4种绑定规则

  • 全局环境中,this默认绑定到window
  • 函数独立调用时,this默认绑定到window
  • 被嵌套的函数独立调用时,this默认绑定到window
  • IIFE立即执行函数实际上是函数声明后直接调用执行
  • 闭包(类似地,test()函数是独立调用,而不是方法调用,所以this默认绑定到window)

Prototype

JavaScript 中的对象有一个特殊的 [[Prototype]] 内置属性,其实就是对于其他对象的引用。几乎所有的对象在创建时 [[Prototype]] 属性都会被赋予一个非空的值。

“构造函数“

在 JavaScript 中对于“构造函数”最准确的解释是,所有带 new 的函数调用。函数不是构造函数,但是当且仅当使用 new 时,函数调用会变成“构造函数调用”。

  • 例题:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
this.a = 20;              
function go() {
/* body... */
console.log(this.a);
this.a = 30;
};
go.prototype.a = 40;
var test = {
a: 50,
init: function(fn) {
fn();
console.log(this.a);
return fn;
}
};
console.log((new go()).a);
test.init(go);
var p = test.init(go);
p();
  • 分析图:

kyrie irving