国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Prototype Function對象 學習

2024-05-06 14:14:56
字體:
來源:轉載
供稿:網友
這個對象就是對function的一些擴充,最重要的當屬bind方法,prototype的幫助文檔上特意說了一句話:Prototype takes issue with only one aspect of functions: binding.其中wrap方法也很重要,在類繼承機制里面就是利用wrap方法來調用父類的同名方法。
argumentNames
bind
bindAsEventListener
curry
defer
delay
methodize
wrap
代碼如下:
//通過Object對象的extend方法對Function的prototype進行擴展
Object.extend(Function.prototype, (function() {
var slice = Array.prototype.slice;
//把args添加到array后面,并返回array,內部方法
function update(array, args) {
var arrayLength = array.length, length = args.length;
while (length--) array[arrayLength + length] = args[length];
return array;
}
//基本和update方法一樣,但是不改變傳入參數array,返回一個新的array
function merge(array, args) {
array = slice.call(array, 0);
return update(array, args);
}
//把函數的參數格式化成數組,并返回
function argumentNames() {
var names = this.toString().match(/^[/s/(]*function[^(]*/(([^)]*)/)/)[1]
.replace(/////.*?[/r/n]|///*(?:.|[/r/n])*?/*///g, '')
.replace(//s+/g, '').split(',');

return names.length == 1 && !names[0] ? [] : names;
}
//把執行函數的上下文綁定到context
function bind(context) {
if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
var __method = this, args = slice.call(arguments, 1);
return function() {
var a = merge(args, arguments);
return __method.apply(context, a);
}
}
//基本和bind差不多,就是保證傳入的第一個參數一定是event對象
function bindAsEventListener(context) {
var __method = this, args = slice.call(arguments, 1);
return function(event) {
var a = update([event || window.event], args);
return __method.apply(context, a);
}
}
//curry是一個數學家的名字,這個方法的作用就是可以連續的傳入參數,看下面的具體例子就知道了
function curry() {
if (!arguments.length) return this;
var __method = this, args = slice.call(arguments, 0);
return function() {
var a = merge(args, arguments);
return __method.apply(this, a);
}
}
//window.setTimeout函數的簡單封裝
function delay(timeout) {
var __method = this, args = slice.call(arguments, 1);
timeout = timeout * 1000
return window.setTimeout(function() {
return __method.apply(__method, args);
}, timeout);
}
//相當于delay(0.01)
function defer() {
var args = update([0.01], arguments);
return this.delay.apply(this, args);
}
//用wrapper包裝將要調用的函數,實現了簡單的AOP功能
function wrap(wrapper) {
var __method = this;
return function() {
var a = update([__method.bind(this)], arguments);
return wrapper.apply(this, a);
}
}
//把當前上下文作為第一個參數顯示的傳入調用的方法
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 湖州市| 南郑县| 定南县| 固阳县| 远安县| 吉首市| 靖州| 镇坪县| 镇雄县| 南宁市| 永嘉县| 东方市| 汝城县| 上犹县| 元江| 岗巴县| 柘城县| 鲁山县| 洪洞县| 岗巴县| 崇礼县| 宁远县| 金塔县| 濉溪县| 云龙县| 青铜峡市| 大余县| 西平县| 建昌县| 沭阳县| 丹阳市| 东乌珠穆沁旗| 台中市| 阿勒泰市| 中卫市| 郎溪县| 原阳县| 萍乡市| 万年县| 城固县| 花垣县|