Web前端之路

Javascript语言精粹

2017-03-12  本文已影响33人  baby熊_熊姐

String.slice(start, end)

end 均可选,默认为数组长度

参数若为负数时,则从后选取,没有任何理由使用string.substring(start, end)

没有任何理由去使用

与array.slice() 不同在于,数组的该方法第一个参数也非必须,默认从第一位开始记

对象

hasOwnProperty(), 检查对象原有属性,obj1.hasOwnProperty(‘name’) 返回布尔值,不会访问原型链

for… in, 枚举,将会枚举所有属性包括函数和原型中的属性,可以过滤。 for (name in obj) { if (type of obj[name !== “function” && obj.hasOwnProperty(‘name’) {// },通过for in 循环获得的顺序是不确定的,更好的做法是数组列举出想要的属性名,通过for遍历数组。

.delete, 删除对象属性,从而暴露原型对象属性, delete obj.name

减少全局变量污染,为你的应用只创建一个唯一的全局对象。var MYAPP = {}; MYAPP.stooge = {};

四种调用模式

调用一个函数会暂停当前函数的执行,传递控制权和参数给新的函数。除了声明时定义的形式参数,每个函数还接收两个附加参数:this 和argument。this的值取决于调用模式。

方法调用模式。调用表达式包含一个提取属性的动作“.”或“[]”。方法可以使用this访问自己所属的对象,this对对象的绑定发生在调用的时候,通过this可取得所属对象的方法称为公共方法。

函数调用模式。当一个函数并非当作属性时,就被当做函数来调用,this被绑定到全局对象。外部函数可以通过将上下文通过变量赋值,供内部函数访问,内部函数直接访问的this将是全局对象。

构造器调用模式。new 构造函数,this绑定到通过new创建的新对象上。一个函数创建的目的就是希望通过new前缀爱调用,那它就被称为构造器函数。

apply调用模式。接收两个参数,第一个是要绑定给this的值,第二个是参数数组。

返回

如果函数调用时在前面加上了new前缀,且返回值不是一个对象,则返回this该新对象。

扩充类型的功能

通过对Object.prototype添加方法使得该方法对所有函数可用。

Function.prototype.method = function(name, func) {

this.prototype[name] = func;

return this;

}

下次给函数添加方法时就可以省略prototype几个字,如Number.method(‘integer’, function(){})

通过给基本类型增加方法,可以极大的提高语言的表现力,原型继承的动态本质,新的方法立刻被赋予到所有对象实例上,即便方法实例在添加之前已经创建好了。

基本类型是公用的结构,更好的做法是在没有该方法名时才去创建

Function.prototype.method = function(name, func) {

if(!this.prototype[method]) {//不存在方法时再创建

this.prototype[name] = func;

return this;

}

}

作用域

在函数中的参数和变量,在函数外部是不可见的,而在函数内部任何位置定义的变量,在该函数内部任何地方都可见。

闭包

函数可以访问它被创建时的上下文环境。内部函数拥有比它的外部函数更长的生命周期?

for(i=0; i

nodes[i].onclick = function(e) {

alert(i)//事件处理器绑定了变量i自身,而不是函数在构造时的变量i

}

}

改造后:

var helper = function(i) {

return function(e) {

alert(i)

}

}

var i;

for (i = 0; i < nodes.length; i++) {

nodes[i].onclick = helper(i)//辅助函数保留了当前的i;

}

模块模式

模块模式的一般形式,一个定义了私有变量和函数的函数,利用闭包创建可以访问私有变量和函数的特权函数,最后返回特权函数,或保存到可以访问的地方。

上一篇 下一篇

猜你喜欢

热点阅读