请深入理解下面的程序,并解释输出结果
运行环境: maxOS,node v6.3.1, 非严格模式运行
var print = function(input){
console.log(input);
}
function Foo(){
getName = function() { print(1)}
return this;
}
Foo.getName = function(){
print(2);
}
Foo.prototype.getName = function(){
print(3);
}
var getName = function(){
print(4);
};
function getName(){
print(5);
}
Foo.getName(); //2
getName(); //4
// Foo().getName(); // function not defined
getName(); //4
new Foo.getName(); //2
new Foo().getName(); //3
new new Foo().getName(); //3
下面是第二个程序,仅修改了一句话:
var print = function(input){
console.log(input);
}
function Foo(){
getName = function() { print(1)}
<span style="background-color: rgb(255, 204, 204);">this.getName = function() { print(0)}</span>
return this;
}
Foo.getName = function(){
print(2);
}
Foo.prototype.getName = function(){
print(3);
}
var getName = function(){
print(4);
};
function getName(){
print(5);
}
Foo.getName(); //2
getName(); //4
Foo().getName(); // 0
getName(); //1
new Foo.getName(); //2
new Foo().getName(); //0
new new Foo().getName(); //0
能够考虑清楚上面程序的输出结果,那么说名你对js的继承链方式理解的差不多啦。 那么,你想通了吗?