//给函数的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的更多相关文章

  1. Function.prototype.toString 的使用技巧

    Function.prototype.toString这个原型方法可以帮助你获得函数的源代码, 比如: function hello ( msg ){ console.log("hello& ...

  2. Object.prototype和Function.prototype一些常用方法

    Object.prototype 方法: hasOwnProperty 概念:用来判断一个对象中的某一个属性是否是自己提供的(主要是判断属性是原型继承还是自己提供的) 语法:对象.hasOwnProp ...

  3. Object.prototype 与 Function.prototype 与 instanceof 运算符

    方法: hasOwnProperty isPrototypeOf propertyIsEnumerable hasOwnProperty 该方法用来判断一个对象中的某一个属性是否是自己提供的( 住要用 ...

  4. JS魔法堂:再次认识Function.prototype.call

    一.前言                                大家先预计一下以下四个函数调用的结果吧! var test = function(){ console.log('hello w ...

  5. 一起Polyfill系列:Function.prototype.bind的四个阶段

    昨天边参考es5-shim边自己实现Function.prototype.bind,发现有不少以前忽视了的地方,这里就作为一个小总结吧. 一.Function.prototype.bind的作用 其实 ...

  6. Function.prototype.bind接口浅析

    本文大部分内容翻译自 MDN内容, 翻译内容经过自己的理解. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Glo ...

  7. JavaScript 函数绑定 Function.prototype.bind

    ECMAScript Edition5 IE9+支持原生,作用为将一个对象的方法绑定到另一个对象上执行. Function.prototype.bind = Function.prototype.bi ...

  8. Function.prototype.bind

    解析Function.prototype.bind 简介 对于一个给定的函数,创造一个绑定对象的新函数,这个函数和之前的函数功能一样,this值是它的第一个参数,其它参数,作为新的函数的给定参数. b ...

  9. 解析Function.prototype.bind

    简介 对于一个给定的函数,创造一个绑定对象的新函数,这个函数和之前的函数功能一样,this值是它的第一个参数,其它参数,作为新的函数的给定参数. bind的作用 bind最直接的作用就是改变this的 ...

  10. Function.prototype.call.apply结合用法

     昨天在网上看到一个很有意思的js面试题,就跟同事讨论了下,发现刚开始很绕最后豁然开朗,明白过来之后发现还是挺简单的,跟大家分享下!  题目如下: var a = Function.prototype ...

随机推荐

  1. 【模板】2-SAT 问题(2-SAT)

    [模板]2-SAT 问题 题目背景 2-SAT 问题 模板 题目描述 有n个布尔变量 \(x_1\)​ ~ \(x_n\)​ ,另有m个需要满足的条件,每个条件的形式都是" \(x_i\) ...

  2. Unity Shader (二)Cg语言

    一.Cg基本数据类型 float 32位浮点数 half 16位浮点数 int 32位整型 fixed 12位定点数 bool 布尔数据 simpler* 纹理对象的句柄( the handle to ...

  3. 四 HBase 客户端设置缓存优化查询。

    其实查询无非是一个 HBase 的 RPC 计算公式 .然后给API 提供值. RPCs = (Rows * Cols per Row) / Min(Cols per Row, Batch Size) ...

  4. hdu 3068 最长回文 【Manacher求最长回文子串,模板题】

    欢迎关注__Xiong的博客: http://blog.csdn.net/acmore_xiong?viewmode=list 最长回文                                 ...

  5. swift具体解释之八---------------下标脚本

    swift具体解释之八-----下标脚本 下标脚本 能够定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中.能够觉得是訪问对象.集合或序列的快捷方式.不须要 ...

  6. mediawiki使用笔记

    https://www.cnblogs.com/ToDoToTry/p/4475067.html

  7. Linux 服务器下多网卡的负载均衡

    Linux 服务器下多网卡负载均衡的实现   一.引言    现今几乎各行各业内部都建立了自己的服务器,由于服务器的特殊地位,它的可靠性.可用性及其 I/O 速度就显得非常的重要, 保持服务器的高可用 ...

  8. hight charts

    hight charts http://www.hcharts.cn/resource/index.php http://www.hcharts.cn/api/index.php

  9. css3 scale的用法例子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Supervisor 的安装与配置教程

    简介 Supervisor是一个进程控制系统. 它是一个C/S系统(注意: 其提供WEB接口给用户查询和控制), 它允许用户去监控和控制在类UNIX系统的进程. 它的目标与launchd, daemo ...