<script> function foo(){ getName = function(){ console.log(1); } return this; } foo.getName= function(){console.log(2)} foo.prototype.getName = function(){ console.log(3); } var getName = function(){console.log(4)} function getName(){ console.log(5) } foo.getName()/*2*/ getName()/*4*/ foo().getName()/*1*/ getName()/*1*/ new foo.getName()/*2*/ new foo().getName()/*3*/ new new foo().getName()/*3*/ </script>把这几个放到一起,我又懵逼了
1 回答
已采纳
按照自己的节奏前行
TA贡献90条经验 获得超70个赞
<script>
<!--首先,你要灌输对js的思想,在js里面all is object,嗯就是什么都是对象-->
function foo(){ //这一局就是 foo方法
getName = function(){
console.log(1);
}
return this; //返回这个方法 就是返回foo
}
foo.getName= function(){console.log(2)} //这里你要把foo.getName看成一个正常的变量,实际上真正命名的时候没人
//会这样写
foo.prototype.getName = function(){ // prototype 属性使向对象添加属性和方法。这里就相当于更改方法了
console.log(3);
}
var getName = function(){console.log(4)}
function getName(){
console.log(5)
}
foo.getName()/*2*/ //结果是2没毛病
getName()/*4*/ //结果是4也没毛病,你自己定义的就是var getName
foo().getName()/*1*/ //这个是方法的getName(),没毛病
getName()/*1*/ //这里就有深究了,和浏览器对js的读取顺序有关系,这个地方自己百度,他应该是默认读取离上次执行
// 最近的位置进行读取
new foo.getName()/*2*/ //没毛病 foo.getName你当成一个单词就行了,"."并不总是代表调用
new foo().getName()/*3*/ //创建一份方法对象,注意,这里是对象,看下我对 prototype 的解释你就明白了
new new foo().getName()/*3*/ // 你new n次也没啥用,只不过是把对象在new一次,即对象的对象
</script>添加回答
举报
0/150
提交
取消
