Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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 使用参数的可变计数调用类对象_Javascript_Function_Class_Arguments_Prototype - Fatal编程技术网

Javascript 使用参数的可变计数调用类对象

Javascript 使用参数的可变计数调用类对象,javascript,function,class,arguments,prototype,Javascript,Function,Class,Arguments,Prototype,我正在为一项非常具体的任务创建自己的类似jQuery的库。(不想使用jquery,更接近原生js) 在我的例子中,我需要一个解决方案来调用包含和不包含agruments的类-特定选择器 我所学的课程必须在两方面都起作用: myclass.function(); 以及: 类的初始化如下所示 (function(window){ var myclass = function( selector ){ return new myclass.model.build( selector

我正在为一项非常具体的任务创建自己的类似jQuery的库。(不想使用jquery,更接近原生js)

在我的例子中,我需要一个解决方案来调用包含和不包含agruments的类-特定选择器

我所学的课程必须在两方面都起作用:

myclass.function();
以及:

类的初始化如下所示

(function(window){
var myclass = function( selector ){
        return new myclass.model.build( selector );
    };

myclass.model = myclass.prototype = {
    constructor: myclass,
    myfunction: function(){
        alert("some function's alert");
    }
};

myclass.model.build = function( selector ){
    if( !selector )
        return this;
    /* Picking objects by selector */
};

window.myclass = myclass;
return myclass;
})(window);

您的意思是希望非实例调用生成一个默认实例,然后应用于它

var Foo = (function () {
    // set up constructor
    var Foo = function () {
        this.fizz = 'buzz';
    };
    Foo.prototype = Object.create(null);
    // instance version
    Foo.prototype.bar = function () {return 'this.fizz is ' + this.fizz;};
    // non-instance version
    Foo.bar = function () {return Foo.prototype.bar.apply(new Foo(), arguments);};
    return Foo;
}());

Foo.bar(); // "this.fizz is buzz"

有几种方法可以实现这一点。这里有一种常见的方法,即设置一个本地函数(“类”)的实例,该实例将其原型配置为一个对象以实现可扩展性,并将属性作为对象附加到该实例

//使用窗口和文档快捷方式
(功能(win、doc){
//设置本地功能以扩展
var jakeWeary=功能(选择器){
//在引用时强制返回实例
返回新的jakewear.fun.start(选择器);
};
//允许通过引用来扩展原型
jakeWeary.fun=jakeWeary.prototype={
建造师:杰克累了,
//使用传递的值进行查询
启动:功能(选择器){
//对当前文档的查询
var节点=doc.querySelectorAll(选择器);
//模拟匹配元素的数组
对于(var i=0;i”)
i
D
D

d
非常感谢。你的例子让我意识到,它是如何真正起作用的。在jq中有一个.extend函数,它将函数直接包含在函数对象中,但jq.fn除外。我以前没有意识到这一点。
var Foo = (function () {
    // set up constructor
    var Foo = function () {
        this.fizz = 'buzz';
    };
    Foo.prototype = Object.create(null);
    // instance version
    Foo.prototype.bar = function () {return 'this.fizz is ' + this.fizz;};
    // non-instance version
    Foo.bar = function () {return Foo.prototype.bar.apply(new Foo(), arguments);};
    return Foo;
}());

Foo.bar(); // "this.fizz is buzz"