对象内部的Javascript原型方法
我试图创建一个包含其他对象和函数的对象,在原型中,相关部分是UI原型对象内部的Javascript原型方法,javascript,object,prototype,Javascript,Object,Prototype,我试图创建一个包含其他对象和函数的对象,在原型中,相关部分是UI原型 var fChat = function() { this.debug = true; }; fChat.prototype = { constructor: fChat, Log: function(str){ if(this.debug){ console.log(str); } }, UI: { Login:
var fChat = function() {
this.debug = true;
};
fChat.prototype = {
constructor: fChat,
Log: function(str){
if(this.debug){
console.log(str);
}
},
UI: {
Login: {
Show: function(){
this.Log("UI.Login.Show()");
}
}
}
};
var fChatInstance = new fChat();
fChatInstance.UI.Login.Show();
当我调用fChatInstance.UI.Login.Show()时,它会给我一个错误:
未捕获类型错误:此.Log不是函数
这是因为通过使用这个在另一个作用域上吗?
通常我做var self=this代码>在原型开始时,但我不知道如何使用对象原型来实现这一点。是的。问题是这个的javascript动态绑定,要解决这个问题,可以使用bind函数将“this”设置为对象。更改fchat函数并按如下方式重构它:
var fChat = function() {
this.debug = true;
this.UI.Login.Show = this.UI.Login.Show.bind(this);
this.Log = this.Log.bind(this);
};
这是对象{Show:function(){/*…*/}}
。您可以通过在Show
中调试并检查this
或执行console.log(this)来解决这个问题代码>在Show
中这是一种有点奇怪的模式。所以每个fChat
都有自己的Log
,UI
?似乎所有这些东西都应该抽象成自己的工作单元“类”@RGraham这是我第一次使用原型和“类”,所以我可能会用错误的方式来做。无论如何,我只初始化了fChat的一个实例。我同意@RGraham的观点,即最好将这个“类”拆分为多个类。例如,创建一个登录
类,然后在构造函数中传入一个记录器
类实例。现在,fChat
类已经有了。请查看一些关于这方面的好信息。