js 类的 私有函数 不能调用 公有函数 吗?

CCDDzclxy 2015-07-14 09:39:21
RT
我的测试代码是这样的:


function Ttest()
{
this.SayHello = function()
{
console.log("Hello");
};

var SayBye = function()
{
console.log("Bye");
this.SayHello();
};

this.ByeBye = function()
{
console.log("ByeBye");
SayBye();
// this.SayHello();
};
}

var g_test = new Ttest();
g_test.ByeBye();


然后 chrome 打印出来的信息为:

ByeBye main.js:17
Bye main.js:11
Uncaught TypeError: Object [object global] has no method 'SayHello' main.js:12












...全文
250 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CCDDzclxy 2015-07-14
  • 打赏
  • 举报
回复
引用 2 楼 wzs_xyz 的回复:
没私有共有的概念,有的只是作用域 你这儿的问题是this指向 构造函数中this指向对象,但SayBye是另一个函数了,并且不是该对象调用的,所以this指向window 可以显示指定this解决该问题, this.ByeBye = function() { console.log("ByeBye"); SayBye.call(this); };
测试看来,确实 如你上所说,但是 还是 不太理解... 为何会 “this指向window”?? 有相关的文章,链接 让我学习下么?
hch126163 2015-07-14
  • 打赏
  • 举报
回复
function Ttest() { var _o=this; this.SayHello = function() { console.log("Hello"); }; var SayBye = function() { console.log("Bye"); _o.SayHello(); }; this.ByeBye = function() { console.log("ByeBye"); SayBye(); // this.SayHello(); }; } var g_test = new Ttest(); g_test.ByeBye();
未知数 2015-07-14
  • 打赏
  • 举报
回复
没私有共有的概念,有的只是作用域 你这儿的问题是this指向 构造函数中this指向对象,但SayBye是另一个函数了,并且不是该对象调用的,所以this指向window 可以显示指定this解决该问题, this.ByeBye = function() { console.log("ByeBye"); SayBye.call(this); };
纯洁袜子 2015-07-14
  • 打赏
  • 举报
回复
在私有函数中你不能用this去点,把this.去掉就可以了 或者你再new一个新的Ttest(),有这个新的实例去调用SayHello方法。
CCDDzclxy 2015-07-14
  • 打赏
  • 举报
回复
引用 6 楼 u011573693 的回复:
可以去看看这本书籍: < this & Object Prototypes >
感谢 5楼的讲解 和 6楼的推荐
1987andy 2015-07-14
  • 打赏
  • 举报
回复
引用 4 楼 CCDDzclxy 的回复:
[quote=引用 2 楼 wzs_xyz 的回复:] 没私有共有的概念,有的只是作用域 你这儿的问题是this指向 构造函数中this指向对象,但SayBye是另一个函数了,并且不是该对象调用的,所以this指向window 可以显示指定this解决该问题, this.ByeBye = function() { console.log("ByeBye"); SayBye.call(this); };
测试看来,确实 如你上所说,但是 还是 不太理解... 为何会 “this指向window”?? 有相关的文章,链接 让我学习下么? [/quote] 可以去看看这本书籍: < this & Object Prototypes >
1987andy 2015-07-14
  • 打赏
  • 举报
回复
js是没有公私之分的,你要理解的是作用域这个概念 你代码之所以报错,是因为你没有理解SayBye函数的作用域,例如:

var SayBye = function()
    {
        console.log("Bye");
        this.SayHello();  ====》  这里的this指向是global,是全局的而不是指向Ttest的
                                                     所以就有后面的异常了。
    };
在函数对象你不,如果你没有用this去申明一个函数,例如上面的Saybye那么函数内部的this指针是指向全局的而不是指向当前函数对象的,这个例子通过测试也很简单,你只要输出this看看就知道了,例如下面的完整例子

function Ttest(){
    this.Say = function(){
                  console.log("this:"   + this );   //这里this指向是函数对象(Ttest)
    }

   var Say_fuck = function(){
                 console.log("this:"  + this);    //指向全局,global/window
   }
   
};

87,841

社区成员

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

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