Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中创建这样的对象的最佳实践是什么:T(';isArray';)([])==T.run(';isArray';)([])==T().run(';isArray';)?_Javascript - Fatal编程技术网

Javascript 在JS中创建这样的对象的最佳实践是什么:T(';isArray';)([])==T.run(';isArray';)([])==T().run(';isArray';)?

Javascript 在JS中创建这样的对象的最佳实践是什么:T(';isArray';)([])==T.run(';isArray';)([])==T().run(';isArray';)?,javascript,Javascript,知道T是主要对象,在JavaScript中创建这样的对象的最佳实践是什么: T('isArray')([]) T.run('isArray')([]) T().run('isArray')([]) T('isArray', []) T.run('isArray', []) T().run('isArray', []) 它们都必须使用相同的函数。因为可以调用主对象,所以它必须是一个函数。函数应根据参数决定返回什么: var T = (function() {

知道
T
是主要对象,在JavaScript中创建这样的对象的最佳实践是什么:

  T('isArray')([])
  T.run('isArray')([])
  T().run('isArray')([])

  T('isArray', [])
  T.run('isArray', [])
  T().run('isArray', [])

它们都必须使用相同的函数。

因为可以调用主对象,所以它必须是一个函数。函数应根据参数决定返回什么:

var T = (function() {

    var functions = { // define functions that can be run like isArray
        isArray: function(a) {
            return Array.isArray(a);
        },

        log: function(a, b) {
            console.log(a + b);
        }
    };

    var noop = function() {}; // function doing nothing (no operation)

    var T = function(f) {
        if(arguments.length >= 2) { // function + args provided
            return (functions[f] || noop) // call it
                    .apply(this, [].slice.call(arguments, 1));
        } else if(arguments.length === 1) { // only function provided
            return function() { // return function that can be called with args
                return (functions[f] || noop)
                        .apply(this, arguments);
            }
        } else { // nothing provided, return T itself (so that e.g. T.run === T().run)
            return T;
        }
    }

    T.run = function() { // run function
        return T.apply(this, arguments);
    };

    T.getState = function() { // another function
        console.log("Not implemented");
    };

    return T; // actually return T so that it gets stored in 'var T'
})();


// tests

console.log(
    T('isArray')([]),
    T.run('isArray')([]),
    T().run('isArray')([]),

    T('isArray', []),
    T.run('isArray', []),
    T().run('isArray', [])
);

T('log')(1, 2);
T.getState();

我认为你需要一个解释来解释这一点是有用的。类似于jquery/yui3的东西完全没有解释任何东西。你想做什么,为什么?呃。请像这样做:
T([]).isArray()
这太好了,因为T本身会有一些方法,而数组是主包中的一个函数。可能有“array.isArray”。当我在T上使用“isArray”方法时,主要问题出现了。我没有指定,但T对象可能有其他方法,如:load、instance、getState。但是主方法应该始终是“run”方法,“a”将被用作参数,因为不仅会有“isArray”方法,而且会有不同的参数number@Totty:我不确定,但即使像jQuery这样的复杂库也没有那么差的性能,所以我不必担心。还有一个问题:我需要它来处理多个实例,但我如何使用相同的“原型”?@Totty:我不完全清楚你的意思。您能提供一个您想要使用的代码示例吗?