这段代码,不太理解。

Longerandlonger 2011-07-12 09:55:00

function Fun(arg)
{
alert(arg);
this.aFun = function() { alert("a"); }
var bFun = function() { alert("b"); }
aFun();
bFun();
}

Fun("xxx");
var fff = new Fun("yyy");
fff.aFun();
fff.bFun(); // 这一句浏览器没有输出,为什么?

先后输出 7 个框,分别是: xxx a b yyy a b a




function Fun(arg)
{
alert(arg);
this.aFun = function() { alert("a"); }
var bFun = function() { alert("b"); }
aFun();
bFun();
}

//Fun("xxx"); // 注释掉了,然后
var fff = new Fun("yyy");
fff.aFun();
fff.bFun();

只输出一个框,既: yyy
为什么我注释掉 Fun("xxx") 会造成这么奇怪的变化呢?
...全文
129 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MadEric 2011-07-12
  • 打赏
  • 举报
回复
fff.bFun(); // 这一句浏览器没有输出,为什么?
如果需要给对象的实例添加属性(方法),需要写成function Fun(arg){this.bFun = function(){...}},否则只是函数内的一个变量,不能成为实例的属性。

var fff = new Fun("yyy");
这一句会依次执行:
alert("yyy");
fff.aFun() = function() { alert("a"); }
var bFun = function() { alert("b"); }
aFun();
aFun()并不是window的方法。如果你没有注释掉Fun("xxx"),在Fun("xxx")执行的时候, this.aFun = function() { alert("a"); } 的效果相当于window.aFun = function() { alert("a"); }。
现在你把Fun("xxx")注释掉后,不能为window添加aFun()这个方法了,所以会出错
koo42636880 2011-07-12
  • 打赏
  • 举报
回复
第一个问题中的 var bFun = function() { alert("b"); }相当于.net中的private 私有类型,只能在类中进行访问,外部无法通过构造函数调用..

第二个问题为什么只输出"YYY" : var fff = new Fun("yyy");构造函数的声明使得Fun()函数里面的this都指向了fff, 所以fff.aFun()可以执行 ,但是bFun为Fun()函数的私有类型,所以报错找不到....
kyzy_yy_pm 2011-07-12
  • 打赏
  • 举报
回复
fff.bFun(); // 这一句浏览器没有输出,为什么?
因为var bFun = function() { alert("b"); }中的bFun不是对象的属性(只有用this前缀的才是)






function Fun(arg)
{
alert(arg);//应该输出yyy
this.aFun = function() { alert("a"); }
var bFun = function() { alert("b"); }
// aFun();//注意this.aFun是对象Fun的属性方法,而aFun啥也不是
bFun();//因为是var声明的,所以并不是对象Fun的属性,所以如此可以
}

//Fun("xxx"); // 注释掉了,然后
var fff = new Fun("yyy");
fff.aFun();//可以
//fff.bFun();//不可用



都报了好几个错误了,都影响执行了
挨踢直男 2011-07-12
  • 打赏
  • 举报
回复
fff.bFun(); // 这一句浏览器没有输出,为什么?
这个b.fun不能在外部访问,那不是对象的属性


function Fun(arg)
{
alert(arg);
this.aFun = function() { alert("a"); }
var bFun = function() { alert("b"); }
aFun();//执行到这句出错了, 你这是在调用window对象中的aFun函数
bFun();
}

//Fun("xxx"); // 注释掉了,然后
var fff = new Fun("yyy");
fff.aFun();
fff.bFun();
豆虫 2011-07-12
  • 打赏
  • 举报
回复
其实就是一个Fun() 和new Fun()的问题
Fun():如果这么调 函数体中的this指代window
new Fun() :如果这么调 函数体中的this指代当前对象

87,909

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧