<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
提交
取消