寄生式继承:创建一个仅用于封装继承过程的函数,函数内部克隆对象,增强并返回该对象(object和create函数不是必须的)。基本思路类似于寄生构造函数与工厂模式。缺点也类似,由于不能复用函数而降低效率等。 a. 调用函数复制父类原型创建一个新对象(利用Object.create()或object())。 b. 通过某些步骤增强该对象,例如添加方法。 c. 返回创建的新对象。
寄生组合式继承: 通过借用构造函数继承属性,通过原型链混成形式来继承方法。本质上是使用寄生式继承父类的原型来继承属性(替代了之前在子类型里调用父类构造函数的过程,我们所需的不过是父类原型的一个副本而已),然后再将结果指定给子类原型。 a. 复制父类原型。 b. 添加因重写原型失去的constructor属性。 c. 将复制的原型赋值给子类原型。 其高效性体现在只调用了一次父类的构造函数,避免了在子类原型中创建不必要的多余的属性。与此同时原型链也不变。可以利用instanceof和isPrototypeOf()确定类型。开发人员普遍认为该方式是引用类型最理想的继承范式。
a) 接受三个参数,第一个参数是相应的JavaScript对象,必须。其他两个非必须。 b) 第二个参数用来过滤结果,可以是数组,或函数。若是数组则过滤后的结果只包含数组中列出的属性,若是函数则会执行更精确的操作。函数接受两个参数(key,value),并返回过滤结果 c) 第三个参控制缩进,若是数字则是空格缩进,数字代表空格数量,最大为10。若是字符串,则会用字符串作为缩进,最大长度也为10,多余会截取 d) toJSON()方法可以作为函数过滤器的补充。可以为任何对象添加toJSON()方法,返回其自身的JSON数据格式 stringify()方法执行过程:
a) NodeIterator:一个简单接口,只允许以一个节点的步幅前后移动 i. 通过document.createNodeIterator(rootNode, whatToShow, filter, false)创建遍历对象 ii. wahtToShow:表示节点类型代码,表示要显示那些节点 iii. filter:过滤器
不指定过滤器则传入null iv. iterator.nextNode()与iterator.previousNode()控制遍历的前进和后退。 b) TreeWalker i. 通过document.createTreeWalker(rootNode, whatToShow, filter, false)创建遍历对象 ii. filter:TreeWalker过滤器返回值在NodeIterator基础上增加了NodeFilter.FILTER_REJECT,跳过相应节点及其整个子节点树。 iii. iterator.nextNode()与iterator.previousNode()控制遍历的前进和后退。除此之外还有更灵活的遍历跳转方法:
parentNode():遍历到当前节点的父节点
first/lastChild():遍历到当前节点的第一/最后一个节点
next/previousSibling():遍历到当前节点的下一/上一个同辈节点 iv. currentNode属性:可以通过设置该值,修改遍历继续行进的起点。很好用的属性,大大增加了遍历的灵活性。
4. DOM范围
a) 相关属性: i. startContainer:范围起点的父节点 ii. startOffset:起点节点在父节点childNodes集合中的索引 iii. endContainer:范围终点的父节点 iv. endOffset:终点节点在父节点childNodes集合中的索引 v. commonAncestorContainer:startContainer和endContainer最近的共同父节点 b) 创建范围:var range = document.createRange() c) 利用范围实现简单选择:range.selectNode(node)、range.selectNodeContents(node)。区别在于前者选择整个节点,后者选择节点的子节点。 d) 更精确的设置范围 i. setStartBefore/After(refNode):将范围起点设置在refNode之前/后 ii. setEndBefore/After(refNode):将范围终点设置在refNode之前/后 e) 更复杂的范围控制,这两个函数都接受两个参数,一个参照节点和一个偏移量值 i. setStart():参照节点 startContainer、偏移量 startOffset ii. setEnd():参照节点 endContainer、偏移量 endOffset iii. 可以使用户这两个方法来模拟前面的简单选择方法,但这并不是主要用途,这两个方法更胜一筹的地方在于可以选择结点的一部分,选择之后便可操作选区。 f) 操作DOM范围中的内容: i. 创建范围时,内部会为这个范围创建一个文档片段(DocumentFragment),范围内所属节点全部被添加至这个文档片段中。 ii. 范围知道自己缺少了那些开标签和闭标签,他能够重新构建有效的DOM结构以便我们对其进行操作。使用范围选区可以在删除文档中某些部分的同时,保持文档结构格式良好。 iii. 表示范围的内部文档片段中的所有节点,都只是指向文档中相应节点的指针。 iv. 一些常用方法:
cloneContents():创建一个范围对象的副本。返回的文档片段包含的是范围节点的副本,而不是实际节点。 g) 插入DOM范围中的内容 i. InsertNode(node):向范围起点处插入一个节点 ii. surroundContents(node):环绕范围插入内容。常用于突显网页中某些词句。具体原理如下:
dragleave或drop:拖出目标触发dragleave事件,成功放入目标触发drop事件 ③ 自定义放置的目标:拖动元素经过无效放置目标时,光标会变成禁止图案。若拖动元素经过不能放置的元素则不可能触发drop事件。但是可以通过重写dragenter和dragover事件的默认行为来将任何元素设置为有效的放置元素。在ondragover中一定要执行 preventDefault(),否则ondrop事件不会被触发。
(3) dataTransfer对象
① 两个主要方法:getData(数据格式)和setData(数据格式, 值),数据格式通常为”Text”,且dataTransfer对象中保存的数据只能在ondrop处理过程中读取 ② 在拖动文本,链接或者图像时,浏览器会自动调用setData()方法将拖动的文本,链接,图像等以text格式保存到dataTransfer对象中,可以通过getData()读取到。也可以自己定义数据 ③ dropEffect与effectAllowed——设置元素允许的拖动方式
① history.pushState(状态对象, null, 相对地址):执行该方法后,新的状态信息将被加入历史信息状态栈,第二个参数暂时没有浏览器实现,可以忽略,传入null即可。 ② popstate事件:在此之后,前进后退按钮可用,会触发该事件,事件对象event包含state属性,值为pushState()方法的第一个参数。注意单机后退按钮返回浏览器的第一个按钮时,event.state为null。 ③ history.replace(状态对象, null):该方法不会在历史状态栈中新建状态,只会重写当前状态。
本篇文章重点说明什么是函数柯里化,这个语法现象的背后动机是什么,有什么样的应用场景,以及与部分应用函数(Partial Applied Function)之间的联系 1. 什么是柯里化函数
A way to write functions with multiple parameter lists. For instance
def f(x: Int)(y: Int) is a
ApplicationContext能读取多个Bean定义文件,方法是:
ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[]{“bean-config1.xml”,“bean-config2.xml”,“bean-config3.xml”,“bean-config4.xml
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information re
参考了
http://zhedahht.blog.163.com/blog/static/25411174201142733927831/
但是用java来实现有一个问题。
由于Java无法像C那样“传递参数的地址,函数返回时能得到参数的值”,唯有新建一个辅助类:AuxClass
import ljn.help.*;
public class BalancedBTree {
BeanUtils.copyProperties VS PropertyUtils.copyProperties
作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,没有考虑到会将null转换为0,而后面的业