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 ...
随机推荐
- 【 D3.js 入门系列 --- 2.1 】 关于怎样选择,插入,删除元素
本人的个人博客首页为: http://www.ourd3js.com/ ,csdn博客首页为:http://blog.csdn.net/lzhlzz/. 转载请注明出处,谢谢. 在D3.js中,选择 ...
- 《Spring技术内幕》笔记-第四章 Spring MVC与web环境
上下文在web容器中的启动 1,IoC容器的启动过程 IoC的启动过程就是建立上下文的过程.该上下文是与ServletContext相伴.在Spring中存在一个核心控制分发器,Dispatcher ...
- Armbian hostname and WiFi configuration
In previous post i have described installation of Armbian on Orange Pi PC Plus. Now is the time for ...
- 之前写的收集的一些c++代码片,算法排序,读文件,写日志,快速求积分等等
写日志: class LogFile { public: static LogFile &instance(); operator FILE *() const { return m_file ...
- c# 引用ConfigurationManager 类
c#添加了Configuration;后,竟然找不到 ConfigurationManager 这个类,后来才发现:虽然引用了using System.Configuration;这个包,但是还是不行 ...
- RAID信息存放位置!
今天偶然的机会,客户打电话说有一台DELL T110的服务器换了主板电池RAID信息没了进不去系统了,问我怎么处理,T110的RAID是主板集成的S100的RAID卡(算是软RAID,通过BIOS配置 ...
- windows无法连接到打印机 错误提示0x00000214
win7 64位 同事win7 32位,通过\\IP连接,安装打印机时提示“windows无法连接到打印机 错误提示0x00000214” 开始——设备和打印机——添加打印机——添加本地打印机——创建 ...
- Vbox下创建Linux和Windows的共享文件夹
我的Vbox版本是4.3.6...在这里以win8和Ubuntu12.04之间共享文件举例 首先运行虚拟机,然后安装增强功能..这个增强功能很碉堡...能开启无缝模式和系统间的剪贴板共享等牛X功能 然 ...
- JS取出两个数组的不同或相同元素
JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合 ...
- JAVA基础数据类型
JAVA的数据类型粗略分两种 1.基本数据类型 整数类型: byte,short,int,long 浮点类型: float,double 字符类型: char 布尔类型: boolean 基本语法格式 ...