大家对于javascript面向对象相关的知识可能都有所涉略,有一个问题可能困扰大家很久了,那就是在构造函数中,如果使用了 this ,那么这个 this 指向谁呢?如果在定义的原型方法中使用了 this ,那么这个 this 又指向谁?是构造函数,原型,还是实例?
function Person(name, age){
this.name = name;
this.age = age;
}
Person.prototype.getName = function() {
return this.name;
}
var p1 = new Person("Jake",18);
p1.getName();
构造函数其实就是普通函数,而 this 是在函数允许难过时确认的。那么是什么导致了构造函数变得很特别?
答案与 new 关键字有关系
如果我们自定义一个 new 方法, 来模拟关键字 new 的能力,那么会有如下实现。
// 将构造函数一参数形式传入
function New(func){
// 声明一个中间对象,该对象为最终返回的实例
var res = {};
if(func.prototype != null){
// 将实例的原型指向构造函数的原型
res.__proto__ = func.prototype;
}
// ret 为构造函数执行的结果,这里通过 apply
// 将构造函数内部的 this 指向修改为指向 res 即实例对象
var ret = func.apply(res,Array.prototype.slice.call(arguments,1));
/