js37---Function.prototype
//给函数的prototype新增名字为name,函数体为fn的函数
Function.prototype.method =function(name,fn){
this.prototype[name] = fn;//this
return this;
}
//再扩展Array的方法,新方法的名字,函数体,形参,实参
if(!Array.prototype.forEach){
//Array.prototype.forEach = function(fn,thisObj){}
//this.fns.forEach( function(el){el(o);} ) function(el){el(o)是函数实参
Array.method("forEach",function(fn,thisObj){//forRach是函数名字,后面是函数声明,fn,thisObj是声明里的形参
var scope = thisObj || window;
for (var i = 0; i < this.length; i++) {
fn.call(scope,this[i],i,this);
}
})
}
if(!Array.prototype.filter){
//this.fns.filter(function(el){if(el != xxx){return el;}})
Array.method("filter",function(fn,thisObj){
var scope = thisObj || window;
var a = [];
for (var i = 0; i < array.length; i++) {
if( !fn.call(scope,this[i],i,this) ){
continue;
}
a.push(this[i])
}
//..........................
return a;
})
}
window.DED = window.DED||{};//有就用自己,没有就用空对象
DED.util = DED.util || {}
//观察者
DED.util.Observer = function(){
this.fns = []
}
//扩展他
DED.util.Observer.prototype = {
//观察
subscribe : function(fn){
this.fns.push(fn);
},
//取消观察
unsubscribe : function(fn){
this.fns = this.fns.filter(function(el){
if(el != fn){
return el;
}
})
},
//循环执行函数被观察的数组
fire:function(o){
this.fns.forEach(function(el){
el(o);
})
}
}
addEvent(items, 'click', function(e) {
var e = e || window.event;
var src = e.target || e.srcElement;
try {
e.preventDefault();
}
catch (ex) {
e.returnValue = false;
}
function F(){}
var f = function(){}
Function.prototype.method =function(name,fn){
alert(1);
}
f.method();//
F.method();//
function F(){}
var f = function(){}
Function.prototype.method =function(name,fn){
this.prototype[name] = fn;
return this;
}
f.method("a",function(){alert("a");});//
F.method("b",function(){alert("b");});//
//f.a();//f.a is not a function
f.prototype.a();//a
//F.b();//F.b is not a function
F.prototype.b()//b
new F().b();//b
形参看成构造函数传入的成员变量的值。函数名看成类名。this.看成成员属性和成员方法。
function addCar(){
this.name = 11;
this.begin = function(){//对象的成员方法属性可以用中括号获取
alert(1);
}
}
new addCar().begin();//
alert(new addCar()["begin"]);//this.begin = function(){alert(1);}
alert(typeof new addCar()["begin"]);//function
new addCar()["begin"]();//
alert(new addCar()["name"]);//
var rr = new addCar();
rr["age"] = 444;
alert(rr["age"]);//
rr["fff"] = function(){alert(777);}
rr["fff"]();//
js37---Function.prototype的更多相关文章
- Function.prototype.toString 的使用技巧
Function.prototype.toString这个原型方法可以帮助你获得函数的源代码, 比如: function hello ( msg ){ console.log("hello& ...
- Object.prototype和Function.prototype一些常用方法
Object.prototype 方法: hasOwnProperty 概念:用来判断一个对象中的某一个属性是否是自己提供的(主要是判断属性是原型继承还是自己提供的) 语法:对象.hasOwnProp ...
- Object.prototype 与 Function.prototype 与 instanceof 运算符
方法: hasOwnProperty isPrototypeOf propertyIsEnumerable hasOwnProperty 该方法用来判断一个对象中的某一个属性是否是自己提供的( 住要用 ...
- JS魔法堂:再次认识Function.prototype.call
一.前言 大家先预计一下以下四个函数调用的结果吧! var test = function(){ console.log('hello w ...
- 一起Polyfill系列:Function.prototype.bind的四个阶段
昨天边参考es5-shim边自己实现Function.prototype.bind,发现有不少以前忽视了的地方,这里就作为一个小总结吧. 一.Function.prototype.bind的作用 其实 ...
- Function.prototype.bind接口浅析
本文大部分内容翻译自 MDN内容, 翻译内容经过自己的理解. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Glo ...
- JavaScript 函数绑定 Function.prototype.bind
ECMAScript Edition5 IE9+支持原生,作用为将一个对象的方法绑定到另一个对象上执行. Function.prototype.bind = Function.prototype.bi ...
- Function.prototype.bind
解析Function.prototype.bind 简介 对于一个给定的函数,创造一个绑定对象的新函数,这个函数和之前的函数功能一样,this值是它的第一个参数,其它参数,作为新的函数的给定参数. b ...
- 解析Function.prototype.bind
简介 对于一个给定的函数,创造一个绑定对象的新函数,这个函数和之前的函数功能一样,this值是它的第一个参数,其它参数,作为新的函数的给定参数. bind的作用 bind最直接的作用就是改变this的 ...
- Function.prototype.call.apply结合用法
昨天在网上看到一个很有意思的js面试题,就跟同事讨论了下,发现刚开始很绕最后豁然开朗,明白过来之后发现还是挺简单的,跟大家分享下! 题目如下: var a = Function.prototype ...
随机推荐
- [NOI2016]优秀的拆分(SA数组)
[NOI2016]优秀的拆分 题目描述 如果一个字符串可以被拆分为 \(AABB\) 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 \(aabaaba ...
- wpf convert png to xaml
原文:wpf convert png to xaml 把png图片转化成xaml资源 <ResourceDictionary xmlns="http://schemas.microso ...
- CF 420B Online Meeting 模拟题
只是贴代码,这种模拟题一定要好好纪念下 TAT #include <cstdio> #include <cstring> #include <algorithm> ...
- CentOS 配置防火墙操作实例(启、停、开、闭port)
CentOS 配置防火墙操作实例(启.停.开.闭port): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status& ...
- python list的+,+=,append,extend
面试题之中的一个. def func1(p): p = p + [1] def func2(p): p += [1] p1 = [1,2,3] p2 = [1,2,3] func1(p1) func2 ...
- hdu1879 继续畅通project(最小生成树)
继续畅通project Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- php 扩展
如何利用PHP扩展函数,扩展出自己的函数等 php扩展函数有哪些zend_parse_parameters() spprintf() RETURN_STRINGL()
- Android开发当中Parcelable接口的使用
本文转载于:http://www.2cto.com/kf/201205/132814.html 本文稍微做了些修改 android提供了一种新的类型:Parcel.本类被用作封装数据的容器,封装后的数 ...
- TCP简单说(下)
本文在Creative Commons许可证下发布 TCP的RTT算法 从前面的TCP重传机制我们知道Timeout的设置对于重传非常重要. 设长了,重发就慢,丢了老半天才重发,没有效率,性能差: 设 ...
- [Python] Finding the most common elements in an iterable
>>> import collections >>> # Tally occurrences of words in a list >>> cnt ...