A factory that creates objects representing HTML elements.
A batch of methods that perform certain operations on this HTML element.
(function() {
/*
* Create a private class
* @param {Object} els arguments A class array composed of all parameters
*/
function _$(els) {
//...
}
//Operations that can be performed on HTML elements
_$.prototype = {
each: function(fn) { / /fn callback function
for(var i=0; i
//Execute len times, each time passing an element elements[i] as a parameter
fn.call(this, this.elements[i]);
}
return this; el) {
el.style[prop] = value;
var that = this;
this.each(function(el) {
that.setStyle('display', 'block');
});
return this;
},
addEvent: function (type, fn) {
var addHandle = function(el) {
if(document.addEventListener) {
el.addEventListener(type, fn, false);
}else if(document. attachEvent) {
el.attachEvent('on' type, fn);
}
};
this.each(function(el) {
addHandle(el);
});
return this; 🎜> }
})();
//--------------------- test --------
$(window).addEvent('load' , function() {
$('test-1', 'test-2').show()
.setStyle('color', 'red')
.addEvent('click', function() {
$(this).setStyle('color', 'green');
});
})
Getting data using chained calling methods Use callback functions to get data from methods that support chained calling. Chained calls are great for assigner methods, but for getter methods, you may want them to return the data you want instead of this (the object on which the method is called). Solution: Use callback technology to return the data you want.
Copy code
The code is as follows:
window.API = window.API || function() {
var name = 'mackxu';
//Privileged method
this.setName = function(name0) {
name = name0;
return this;
};
this.getName = function(callback) {
callback.call(this, name);
return this;
} ;
};
//------------- test ---
var obj = new API();
obj.getName(console.log) .setName('zhangsan').getName(console.log);
Design a JS library that supports method chain calling
JS library features:
Events: Add and delete event listeners, and plan event objects
DOM: Class name management, style management
Ajax: Normalize XMLHttpRequest
Function.prototype.method = function(name, fn) {
this.prototype[name] = fn;
return this;
};
(function() {
function _$(els) {
//...
}
/*
* Events
* addEvent
* removeEvent
*/
_$.method('addEvent', function(type, fn) {
> *RemoveClass
*Hover
*Hasclass
*getClass
*getstyle
*setstyle
*/
.method ('addclass' e) { //...
.method('removeClass', function(classname)
.
. ) {
//...
})
/*
* AJAX
* * ajax
*/
.method('ajax', function(url, method ) {
//...
); /Resolve the JS library naming conflict problem
window.installHelper = function(scope, interface) {
scope[interface] = function() {
return _$(arguments)
}
}
})();
Summary:
Chained calls help simplify code writing and to some extent make the code more concise and readable. In many cases, using chained calls can avoid reusing an object variable multiple times, thereby reducing the amount of code. If you want to keep the interface of the class consistent and make both the assignor and the valuer support chain calls, then you can use a callback function in the valuer to solve the problem of obtaining data.