♫【JS模式】偏函数】的更多相关文章

<深入浅出Node.js> var toString = Object.prototype.toString var isType = function(type) { return function(obj) { return toString.call(obj) == '[object ' + type + ']' } } var isString = isType('String') var isFunction = isType('Function') console.log(isSt…
<JavaScript模式> /** * 单体(Singleton)模式的思想在于保证一个特定类仅有一个实例.这意味着当您第二次使用同一个类创建新对象的时候,每次得到与第一次创建对象完全相同对象 * 在JS中没有类,只有对象.当您创建一个新对象时,实际上没有其他对象与其类似,因此新对象已经是单体了 * 在JS中,对象之间永远不会完全相等,除非它们是同一个对象 */ var obj = { myprop: 'my value' } var obj2 = { myprop: 'my value'…
首先需要知道的是 模式只是思想.不要用 结构 看模式. ES中函数是对象,因此函数也有属性和方法. 每个函数含有两个属性: length 和 prototype 每个函数含有两个非继承的方法: apply 和 call 属性中:最为重要的 prorotype 对应的值是一个 对象. (length不重要,不管他了) 就ES中的引用类型而言,prorotype 是他们所有实例方法的真正所在. prototype 对象有一个 不可枚举的属性 constructor ,所以使用 for-in 无法发现…
1. 状态模式 var offLightState = function(light){ this.light = light; } offLightState.prototype.buttonWasPressed = function(){ console.log('弱光'); this.light.setState(this.weakLightState); } var weakLightState = function(light){ this.light = light; } weakL…
1. 装饰者模式 给对象动态增加职责的方式称为装饰者模式. Function.prototype.before = function(beforefn){ var _self = this; return function(){ beforefn.apply(this,arguments); return _self.apply(this,arguments); } } Function.prototype.after = function(afterfn){ var _self = this;…
1. 中介者模式 所有对象通过中介者进行通信 var playDirector = (function(){ var players = []; var options = {}; options.add = function(p){ players.push(p); } options.die = function(p){ for(var i = 0;i<players.length;i++){ if(players[i] === p){ players.splice(i,1); }else{…
1. 职责链模式 将对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. var chain = function(fn){ this.fn = fn; this.successor = null; } chain.prototype.setNextSuccessor = function(successor){ return this.successor = successor; } chain.prototype.passRequest = function(){ var ret…
1. 发布-订阅模式 var observe = (function(){ var events = {}, listen, trigger, remmove; listen = function(key,fn){ if(!events[key]){ events[key] = []; } events[key].push(fn); }; trigger = function(){ var key = Array.prototype.shift.call(arguments); var fns…
1. 策略模式 策略模式定义一系列的算法,把它们封装起来,并且可以互相替换. var strategies = { isNonEmpty: function(value,errMsg){ if(value === ''){ return errMsg; } }, minLength:function(value,length,errMsg){ if(value.length < length){ return errMsg; } } } var validator = function(){ t…
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script> function Car(options){ this.doors = options.doors || 4; this.state = options.state || "brand new"; this.color = options.color |…
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script> //据说这就是组合模式了,就是逸带的感觉; var $ = jQuery = window.$ = function(){}; $.prototype = { addClass : function(value){ var classNames, i ,l , elem,…
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script> /* *flyweight 享员模式 */ //例子是一个图书馆存书借书 ->_-> var Book = function(id, title, author, genre, pageCount, publisherId, ISBN, checkoutDate…
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script> var varlidator; varlidator = { validate: function(value, type){ var value = value; var type = type; switch(type){ case 'isnonEmpty' : { /…
在Javascript中动态的给对象添加职责的方式称作装饰者模式. 下面我们通常遇到的例子: var a = function () { alert(1); };//改成: var a = function () { alert(1); alert(2); }; 用装饰者模式,在不改原来函数的基础上,我们增加自己的新功能. var a = function () { alert(1); }; var _a=a; a=function(){ _a(); alert(2); } a(); var P…
职责链模式的定义:使用多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链, 并沿着这条链条传递下去,直到有一个对象处理它为止. var order500 = function (ordertype, pay, stock) { if (ordertype === 1 && pay == true) { console.log("500元定金,100元优惠券"); } else { return 'next'; } }; var o…
发布订阅模式又叫观察者模式,它定义一种一对多的依赖关系, 当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. document.body.addEventListener('click', function () { alert(1); }, false); document.body.addEventListener('click', function () { alert(2); }, false); document.body.addEventListener('click',…
1. 单例模式 单例模式的核心是确保只有一个实例,并提供全局访问. function xx(name){}; Singleton.getInstance = (function(){ var instance = null; return function(name){ if(!instance){ instance = new xx(name); } return instance; } })();…
//singleton var SingletonTester = (function(){ function Singleton(options){ options = options || {}; this.name = "SingletonTester"; this.pointX = options.pointX || 6; this.pointY = options.pointY || 10; }; var instance; var _static = { name : &q…
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-…
shift + 回车 是换行 转自: http://zhidao.baidu.com/link?url=MYjGRwvVQYJwnr38VTHPJdzRNtF1COyqpeuAtBYbxFYJcu6pWzv-EuUHgUCnDZVtbKJroMMPkeYvKP7xJSVe07FHi5q_cMtut2LJGez6FMK…
下面的状态机选择通过Function.prototype.call方法直接把请求委托给某个字面量对象来执行. var light = function () { this.currstate = FSM.off; this.button = null; }; light.prototype.init = function () { var button = document.createElement('button'); self = this; button.innerHTML = '已关灯…
Function.prototype.before = function (beforefn) { var _self = this; return function () { beforefn.apply(this, arguments); return _self.apply(this, arguments); }; }; var func = function (param) { console.log(param); }; func =func.before( function (par…
var objectPoolFactory = function (createObjFn) { var objectPool = []; return { create: function () { var obj = objectPool.length === 0 ? createObjFn.apply(this, arguments) : objectPool.shift(); return obj; }, recover: function (obj) { objectPool.push…
var opendoor = { execute: function () { console.log("开门"); } }; var closedoor = { execute: function () { console.log("关门"); } }; var lighton = { execute: function () { console.log("开灯"); } }; var cmd = function () { return {…
function Universe(){ var instance; Universe = function (){ return instance; } Universe.prototype = this; console.log(Universe); instance = new Universe(); instance.constructor = Universe; instance.start_time = 0; instance.bng ="dd"; return insta…
策略 命令 迭代器 代理 组合 发布/订阅 单例 享元 职责链 中介者 装饰者 状态 适配器 设计原则: 单一职责.最少知识.开放-封闭…
// 主题,接收状态变化,触发每个观察者 class Subject { constructor() { this.state = 0 this.observers = [] } getState() { return this.state } setState(state) { this.state = state this.notifyAllObservers() } attach(observer) { this.observers.push(observer) } notifyAllOb…
Backbone.js的技巧和模式 Backbone.js的技巧和模式   本文由白牙根据Phillip Whisenhunt的<Backbone.js Tips And Patterns>所译,整个译文带有我自己的理解与思想,如果译得不好或不对之处还请同行朋友指点.如需转载此译文,需注明英文出处:http://coding.smashingmagazine.com/2013/08/09/backbone-js-tips-patterns/,以及作者相关信息 作者:Phillip Whisen…
一.前言 这篇开始主要介绍代码复用模式(原书中的第六章),任何一位有理想的开发者都不愿意将同样的逻辑代码重写多次,复用也是提升自己开发能力中重要的一环,所以本篇也将从“继承”开始,聊聊开发中的各种代码复用模式. 其实在上一章,我感觉这本书后面很多东西是我不太理解的,但我还是想坚持读完,在以后知识逐渐积累,我会回头来完善这些概念,算是给以前的自己答疑解惑. 二.类式继承VS现代继承模式 1.什么是类式继承 谈到类式继承或者类classical,大家都有所耳闻,例如在java中,每个对象都是一个指定…
从一个原生HTML/CSS/JS模式的网页改造到ReactJS模块化的结构,需要以下步骤: (1)引用ReactJS框架 ->(2)使用webpack 工具 -> (3)配置webpack使之识别各种语法:JAX,HTML,CSS等 以下是一些坑: 1.ReactJS框架并不能实现JS的模块化 纯ReactJS其实和JqueryTemplate差不多,可以把HTML写成一个模板,然后以插入到某个DIV里的方式来实现HTML的模板化. 但是单纯靠ReactJS这个框架,其实这并没有实现JS的模块…