level 8
fengdayin
楼主
一直有人问我 call() , applay() 函数的用法, 感觉是多此一举,基本不用。
那么现在用一个实践说明一下。
有许多时候是只能用call() , applay() 才能有效。![[茶杯]](/static/emoticons/u8336u676f.png)
/**
* 目标:
* (1) 建立一个Poe对象,指代页面上所有的同类标签元素,比如所有的div元素。
* (2) 使用P的each()函数遍历,输出每个div元素的标签名+索引值。
* var p = new Poe('div');
* p.each(function(){
******alert(this.tagName + ' ' + index);
**});********输出DIV0 DIV1 DIV2 ...**********
/*===================================================================*/
// 创建P()构造函数
var Poe = function (selector) {
/**/this.create(selector); // 构建
};
// 重写P的原型对象
Poe.prototype = {
////初始构建函数
/**/create: function (selector) {
/******/this.selector = selector;
/******/this.elements = document.getElementsByTagName(selector);
/******/this.length = this.elements.length;
/**/},
////遍历函数
/**/each: function (callback) { // 回调函数callback
/******/var i = 0, len = this.elements.length;
/******/for (; i < len; i++) {
/******/ callback.call(this.elements[i], i); // call()函数
/******/}
/**/}
};
window.onload = function () {
/**/var p = new Poe('div');
/**/p.each(function (index) {
////输出每个div的标签名字'DIV'和索引值
/******/alert(this.tagName + ' ' + index);
/**/});
};
////////输出DIV0 DIV1 DIV2 ...
//在this.elements[i]中,并没有callback()这个方法,
//也就是无法 this.elements[i].callback();
//于是采用借用的方式 callback.call(this.elements[i], i);
/*===================================================================*/
2013年05月27日 11点05分
1
那么现在用一个实践说明一下。
有许多时候是只能用call() , applay() 才能有效。
/**
* 目标:
* (1) 建立一个Poe对象,指代页面上所有的同类标签元素,比如所有的div元素。
* (2) 使用P的each()函数遍历,输出每个div元素的标签名+索引值。
* var p = new Poe('div');
* p.each(function(){
******alert(this.tagName + ' ' + index);
**});********输出DIV0 DIV1 DIV2 ...**********
/*===================================================================*/
// 创建P()构造函数
var Poe = function (selector) {
/**/this.create(selector); // 构建
};
// 重写P的原型对象
Poe.prototype = {
////初始构建函数
/**/create: function (selector) {
/******/this.selector = selector;
/******/this.elements = document.getElementsByTagName(selector);
/******/this.length = this.elements.length;
/**/},
////遍历函数
/**/each: function (callback) { // 回调函数callback
/******/var i = 0, len = this.elements.length;
/******/for (; i < len; i++) {
/******/ callback.call(this.elements[i], i); // call()函数
/******/}
/**/}
};
window.onload = function () {
/**/var p = new Poe('div');
/**/p.each(function (index) {
////输出每个div的标签名字'DIV'和索引值
/******/alert(this.tagName + ' ' + index);
/**/});
};
////////输出DIV0 DIV1 DIV2 ...
//在this.elements[i]中,并没有callback()这个方法,
//也就是无法 this.elements[i].callback();
//于是采用借用的方式 callback.call(this.elements[i], i);
/*===================================================================*/