function Foo() {
getNum = function () { console.log(1) };
this.getNum = function () { console.log(2) };
}
Foo.prototype.getNum = function () { console.log(3) };
var getNum = function () { console.log(4) };
function getNum() { console.log(5); }
getNum();
var f = new Foo();
f.getNum();
先搞清楚2个概念:
function Foo() {
getNum = function () { console.log(1) };
this.getNum = function () { console.log(2) };
}
Foo.prototype.getNum = function () { console.log(3) };
// 1.先预解析全局的变量“var getNum”和函数“function getNum() {console.log(5) }”
//2.预解析完毕之后,getNum最终的值为function getNum() {console.log(5) }。
var getNum = function () { console.log(4) };
function getNum() { console.log(5); }
// 3.代码执行阶段,变量getNum进行赋值,所以全局下的getNum最终值为function() { console.log(4); },调用getNum输出结果为4。
getNum();
//4.代码继续往下执行,构造函数Foo实例化,实例对象f自身会继承构造函数内使用”this.”定义的方法getNum,即function() { console.log(2); }。
var f = new Foo();
// 5.f的原型会指向构造函数的原型对象,即function() { console.log(3); }。f.getNum()调用同名方法时,优先调用自身的方法,所以结果输出2。
f.getNum();