javascript - 通过变量重新初始化 JavaScript 函数对象

标签 javascript object

这在 PHP 中相当容易完成,我发现自己处于一种可以派上用场的情况,但我不相信 PHP 技巧会起作用。

基本上,我想使用从对象内的函数传递的变量,然后使用子对象(由变量定义)重新初始化该对象。

var View = function(){
    var fn = this;

    fn.load = function(name){
        return new name();
    }
}
var view = View.load('titleView');

这是一个非常早期的工作,所以请原谅它看起来很奇怪的事实(仍然需要更多地修改这个概念)。但总的来说,它应该大致展示了这个概念。

有没有一种方法可以使用新函数重新创建当前函数实例?要在我想到的方面做到这一点,我需要使用变量而不是传递新对象。这可能吗?我确信它必须以某种形式存在。有什么想法/指示吗?由于我不确定正确的关键字,Google 一直让我失望。

编辑: 还应该显示“titleView”类背后的想法

var titleView = function(){}

titleView.prototype = new View;

最佳答案

我认为最简单的方法是通过某种可以生成您想要的 View 类型的工厂。像这样的事情:

var View = (function() {
    var registry = {};

    return {
        register: function(type, fn) {
            if (typeof registry[type] === 'undefined') {
                registry[type] = fn;
                return true;
            }
            return false;
        },

        load: function(type) {
            return new registry[type]();
        }
    };
})();

var titleView = function() {
    this.name = 'titleView';
};
var subTitleView = function() {
    this.name = 'subTitleView';
}

View.register('titleView', titleView);
View.register('subTitleView', subTitleView);

var view = View.load('titleView');
console.log("Created view type: " + view.name);

view = View.load('subTitleView');
console.log("Created view type: " + view.name);

这将给出以下内容(允许您动态重新创建view变量):

// Created view type: titleView
// Created view type: subTitleView

如果您尝试按照示例的方式进行操作,则必须使用如下子类:

function Base() {
    this.name = "Base";
    this.load = function(fn) {
        fn.apply(this);
    }
}
function Other() {
    Base.apply(this, arguments);
    this.name = "Other";
}

var view = new Base();
console.log(view);

view.load(Other);
console.log(view);

// => Base { name: "Base", load: function }
// => Base { name: "Other", load: function }

但是,使用此方法,在调用 view.load(Other) 后,您的 View 仍将保留在调用 load 之前拥有的任何属性/方法(这可能不是您想要的想要)。

关于javascript - 通过变量重新初始化 JavaScript 函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24583261/

相关文章:

javascript - jQuery.getJSON().error() 未在 404 错误上执行

javascript - 在 Javascript 中禁用多个工作日

javascript - 如何使用 Javascript 向用户询问随机数学问题?

javascript对象 - 如何在类函数中调用类变量

c# - Thrift 中缺少 "objects"是不是很尴尬?

javascript - 根据所选选项动态使用不同的数据对象

javascript - 爬取 javascript 表但考虑异常请求

javascript - 我怎样才能使这个过渡平滑而不是跳跃起来

javascript - 如何像数组一样迭代 JavaScript 对象的属性?

c# - 从未知类返回字符串