彻底理解this,需要彻底理解函数
-
函数是复杂类型,存储在堆中.
-
函数是独立的, 对象中的方法只是对象中有个函数的引用
-
函数被调用时,调用者会像被调用者提供个上下文环境, 这个环境就是this
-
构造函数稍微有点特殊,它绑定了上下文,添加了原型,调用了方法
"use strict";
var name = "hello";
var obj = {
name:"wanhong",
getName:function(){
console.log(this.name);
}
}
// 默认调用
obj.getName(); // wanhong
// 引用调用
var fun = obj.getName;
fun();
// 应用apply改变context
var scope = {name:"world"};
fun.apply(scope); // world
// 构造函数自带context
function People() {
this.name='wanhong';
}
var p = new People();
//构造的过程差不多如下
// var scope = {name:"wanhong"};
// scope.__proto__ = People.prototype;
// scope.constructor = People;
// People.apply(scope);
// return scope;