如何在JavaScript中创建一个创建构造函数的构造函数?

3
有时候在 JavaScript 中,我需要许多构造函数和对象来创建伪类,因为我非常喜欢面向对象编程,所以我会做一些像这样的事情:
var anyClass = (function (settings) {
    var staticPrivate = {}, staticPublic = function () {
        var public = this, private = {};
        (function constructor (here, the, args) {
            this.hta = [here, the, args, arguments];
        }).apply(this, arguments);
        arguments = undefined;delete arguments;
        private.stuff = function () {}
        Object.defineProperties(public, {
            "e.g. length": {
                get: function () {
                    return private.length;
                }, 
                set: function (newValue) {
                    return;
                }, 
                enumerable: false
            }
        });
    };
    Object.defineProperties(staticPublic, {
        "staticFinalHiddenString": {
            get: function () {
                return "YEAH, I'm static and final and hidden...";
            }, 
            set: function (newValue) {
                return "You cannot set me.. :P";
            }, 
            enumerable: false
        }
    });
    staticPrivate.some = function (init) {
        if (settings.some == "settings") init();
    }
    window.requestAnimationFrame(function () {
        staticPrivate.some(function (I) {
            run(on, first, render);
        });
    });
    return staticPublic;
})({
    some: "settings", 
    here: null
});

每次都需要这样做,现在我想创建一个为我生成新类的构造函数。我想到了这个:
new Class({
    constructor: function (here) {
        is(my + constructor);
    }, 
    properties: {
        name: {
            getter: function () {}, 
            setter: function (newValue) {}, 
            hidden: false, 
            static: false, 
            final: false
        }, 
        version: {
            getter: function () {
                return 0.3;
            }, 
            setter: function (newValue) {}, 
            hidden: true, 
            static: true, 
            final: true
        }
    }
});

但是我的问题是,我不知道如何创建一个带有构造函数的原型/构造函数类。prototype.prototype 不起作用。
我只是尝试了这个:
var Class = (function () {
    var Class = (function () {
        var constructor = function () {
            return (function (information) {
                this.prototype = {};
                var properties = {};
                for(var key in information.properties) {
                    properties[key] = {
                        get: information.properties[key].getter, 
                        set: information.properties[key].setter, 
                        enumerable: !information.properties[key].hidden || true
                    };
                };
                Object.defineProperties(this.prototype, properties);
                return this;
            }).apply(this, arguments);
        };
        return constructor;
    })();
    return Class;
})();

对我来说那不起作用 :C

希望你能帮助我。谢谢...


4
Javascript不是一种面向对象的语言。每次我试图将Javascript当作面向对象的语言使用(或滥用)时,都会陷入一片混乱之中。 - Mathias Vonende
@maze-le 请查看JavaScript面向对象编程简介 - Aprillion
6
JavaScript 是面向对象的语言,只是它不是基于类的语言。 - slebetman
你看过这个吧:JavaScript .prototype是如何工作的? - Liam
1个回答

0

我明白了我的错误,现在当我有一个构造函数时,我可以返回一些东西。

var Class = function() {};和闭包函数中的Class.prototype.apply(this, arguments)一起完成了这个任务,这就是为什么如果我只是这样做,我可以在构造函数中返回Class

var Class = function () {
    var ClassICreate = function () {};
    ...
    return ClassICreat;
}

不会起作用,因为你不能从构造函数中返回,因为它是一个对象。


这是我的工作方式:

var Class = (function () {
    var Class = function () {
        return (function (information) {
            var Class = function () {};
            var properties = {};
            for(var key in information.properties) {
                properties[key] = {
                    get: information.properties[key].getter, 
                    set: information.properties[key].setter, 
                    enumerable: !information.properties[key].hidden || true
                };
            };
            Object.defineProperties(Class.prototype, properties);
            return Class;
        }).apply(this, arguments);
    };
    return Class;
})();

在我找到答案后,它看起来对我来说非常容易,感谢评论,它们帮助我找到了正确的答案...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接