Javascript 使用参数的可变计数调用类对象
我正在为一项非常具体的任务创建自己的类似jQuery的库。(不想使用jquery,更接近原生js) 在我的例子中,我需要一个解决方案来调用包含和不包含agruments的类-特定选择器 我所学的课程必须在两方面都起作用: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
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"