为了账号安全,请及时绑定邮箱和手机立即绑定

哪位大神能帮我看一下,关于js的

哪位大神能帮我看一下,关于js的

qq_小盛开_0 2017-02-02 17:16:33
<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>


查看完整回答
3 反对 回复 2017-02-02
  • 1 回答
  • 0 关注
  • 1782 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信