function Fn() {
say = function () {
console.log(1);
};
return this;
}
Fn.say = () => {
console.log(2);
};
Fn.prototype.say = () => {
console.log(3);
};
var say = () => {
console.log(5);
};
function say(paras) {
console.log(4);
}
new Fn().say(); //new访问原型链 3
Fn.say(); //直接访问静态方法 2无疑
say();
/*
1 --要有Fn()才行:因为在默认情况下say是挂载在window下的,当执行Fn()时,赋值操作执行,进行了挂载,所以可以进行访问。还因为Fn()在var赋值操作后面,被覆盖了,故显示1,如Fn()在var前,则显示5
5 --无Fn():不执行Fn(),相当于没有了赋值操作,所以打印的时后面赋值的5
附:当出现相同名称时,优先级为:变量声明< 函数声明 < 变量赋值(NO.1)
*/
Fn().say(); //因为返回了this,相当于this.say() //1
//加上this.
function Fn() {
this.say = function () {
console.log(1);
};
return this;
}
new Fn().say();
//1 加上this后,say是挂载在Fn()的构造器上的,根据new的寻找规则,先构造器后原型,在原型链
Fn.say(); //2
say(); //5 因为没有在全局上挂载了,所以显示后面赋值的5
Fn().say(); //1
全部评论
(1) 回帖