对象内部的 Javascript 原型(prototype)方法

标签 javascript object prototype

我正在尝试创建一个包含其他对象和函数的对象,在原型(prototype)中,相关部分是 UI 原型(prototype);

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() 时,它给我一个错误: 未捕获的类型错误:this.Log 不是一个函数

那是因为在另一个范围内使用 this 吗? 通常我会在原型(prototype)的开头执行 var self = this;,但我不知道如何使用对象原型(prototype)来做到这一点。

最佳答案

是的。问题是 this 的 javascript 动态绑定(bind),要修复它,您可以使用绑定(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);
};

关于对象内部的 Javascript 原型(prototype)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31208984/

相关文章:

javascript - 将对象属性和值转换为字符串

javascript - 设置原型(prototype)对象的字段会更改所有实例

javascript - 帮助我理解 DOM 中的对象

javascript - 克隆原型(prototype)函数并保持作用域

javascript - 当调用和应用不绑定(bind)工作时,为什么要绑定(bind)工作?

javascript - 创建后销毁 Backbone.Router 和所有副作用

javascript - 如何使用double for 语句创建一个循环来排序Array 来处理有月和日的Array?

javascript - 如何在按钮点击时显示 iframe

javascript - Internet Explorer 8 中的 JQuery 问题

javascript - 基于For循环迭代的数组拼接