调用对象内部的方法

刘易斯

我正在尝试创建一个多语言的javascript对象。就像是:

function language(lang){
    this.error = {
        fname : function(lang){
            var fname = {
                vn : "Tên",
                en : "First Name",
            };
            return fname.lang;
        },
    };
}

当我试图打电话给我时fname

var lang = new language("en");
console.log(lang.error.fname);

原来是function(lang){var fname = {vn : "Tên",en : "First Name",};return fname.lang;}而不是First Name我的代码有什么问题?我怎样才能fname正确地获得价值呢?

我是JS的新手。如果有人帮助我解决此问题,我将不胜感激。

先生代码

作为快速解决方案,您需要[]在返回值时使用语法,并langfname()函数中删除参数,因此它变为:

小提琴

function language(lang){
    this.error = {
        fname : function(){
            var fname = {
                vn : "Tên",
                en : "First Name",
            };
            return fname[lang];
        },
    };
}

language = new language('en');
console.log( language.error.fname() );

这行得通,但是它不是一个很好的结构。看一下获得翻译的语法,这看起来很奇怪,为什么要有fname()函数呢?还要查看翻译的定义方式,将它们与许多JavaScript函数和逻辑混合在一起,这使其难以维护,并且任何人都不可能添加不熟悉JavaScript的翻译。


让我们看一个不同的结构:

小提琴

function language(lang){
    var translations = {
        vn : {
            error_fname : "Tên",
        },
        en : {
            error_fname : 'First Name',
            error_lname : 'Last Name'
        }
    };

    var currentLang = 'en'; // default

    function get(key){
        return translations[currentLang][key];
    }

    // public pointers
    this.get = get;

    // constructor
    if(typeof lang != 'undefined' && translations[lang]){
        currentLang = lang;   
    }
}

var language = new language('en');
console.log( language.get('error_fname') );

首先看一下翻译的定义。非常清楚,en所有英语翻译都有一个对象。所有的英语翻译都包含在en对象中-有意义吗?翻译中没有混入JavaScript逻辑,这意味着您可以执行诸如使用JSON结构之类的操作,而JSON结构可以由不熟悉JavaScript的翻译人员读取。您甚至可以为翻译人员提供一个基本.ini文件,并由于其简单性而将其转换为此JavaScript / JSON结构。

还有其他好处,例如翻译被封装,并且不经过该get()方法就不能直接访问


这是另一种实现方法,它使用.语法来获取翻译:

小提琴

function language(lang){
    var translations = {
        vn : {
            error_fname : "Tên",
        },
        en : {
            error_fname : 'First Name',
            error_lname : 'Last Name'
        }
    };

    var currentLang = 'en'; // default

    if(typeof lang != 'undefined' && translations[lang]){
        currentLang = lang;   
    }

    return translations[currentLang];
}

var language = language('en');
console.log( language.error_fname );

没有get()您可能会或不喜欢的功能。就个人而言,由于封装和OOP风格,我更喜欢其他方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从类内部与从方法内部调用对象的方法

如何从对象内部调用方法?

从对象内部调用operator []方法

如何从方法内部调用JavaScript对象方法

如何从对象的父类的方法内部获取对象的调用实例?

无法调用在javascript中的对象内部定义的方法

从函数内部创建的对象中模拟方法调用(python)

为什么委托对象可以调用内部方法?

调用类内部的方法将对象保存在字典中

从内部方法调用方法

在方法内部调用方法

如何从对象内部调用函数

对象内部的模拟模块调用

从javascript对象内部调用requestAnimationFrame

调用内部对象函数javascript

在模型内部调用方法

函数内部的调用方法

自身内部的调用方法

TypeError:“类名”对象不可调用(在通过tkinter.Button.command调用的方法内部)

如何在哈希映射对象的流内部调用函数,并根据流内部调用的方法的输出累加总和

在javascript中的对象内部调用对象函数

从内部方法返回对象

静态类方法在类外部调用时返回对象,但在不同类内部调用时返回空对象

Mockito间谍-在间谍对象中调用内部类方法而不是间谍方法时

在JavaScript类中调用父方法,但stll可以访问对象实例内部的原型方法吗?

从对象文字foo外部,如何在foo内部调用方法的内部函数?(请参见下面的代码)

Ruby使用默认库在方法内部获取调用者对象的名称

C ++使用指针在对象内部调用方法以更改成员值

在-dealloc内部调用的异步方法可能会生成不需要的僵尸对象