问题缘起
代码展示
var Human=function(gender){
this.gender=gender;
//debugger;
Human.prototype={
test:function(){
alert("test")
}
}
}
var human=new Human("male");
console.log(typeof human.test)
解析
new 操作符的四步骤
1. var o = new Object();//首先创建一个空对象
2. o.__proto__ = A.prototype;//将空对象的原型链指向A对象的prototype属性
3. A.call(o)//调用A方法,并将其中的this指向设置为刚创建的空对象。(由于这里this是指向o,可以把什么this.name/getName绑定到o上)
4. 把这个o返回给a;//完成var a = new A()的过程.
new操作符执行到第三步才会把构造函数的原型链设定。但是第二步就需要把构造函数的原型链给实例的__proto__
属性,而此时外部并没有定义原型链。因而自然没有test方法。
所以原型链这种东西应该写道外面去。