ES5 obj,arr,func扩展

2019-07-06  本文已影响0人  圣召唤

严格模式 

<script>

'use strict'

</script>

在函数中不用var去创建一个变量的话,该变量会自动升为全局变量,或者说之间变为 window.username='123'

构造函数,创建实例时需用NEW

严格模式要求:1.必须用VAR声明关键字  不严谨的输入在严格模式下会出错

                              2.禁止自定义函数中的this指向window;自定义函数中用this指向某一 东西时,实际上是用window 调用东西,这时自定义函数中的this指向了window ,而要想不指向window就需要在调用函数前加NEW

                              3.创建eval()作用域 eval()的作用是解析传进去的字符串如果传进去的字符串是JS代码的话能直接执行 防止局部变量对全局变量的污染。

                             4.对象不能有重名的属性 

json对象

后台传数据时如果用XML传的话会比较冗余,它在解析标签时会解析一对标签<>、</>这样就会造成比较浪费流量。

JSON.stringify(obj/arr)    #将js对象(数组)转换为json对象(数组)

JSON.parse(json)  #将json对象(数组)转换为js对象(数组) 

{ }表示一个对象

Obiect扩展

ES5给object扩展了一些静态方法,常用的有两个:

object.create(prototype,[descriptors])  #object 相当于对象上一层的构造函数或类;creare是直属于object的方法;prototype是原型,原型身上绑定的方法属于多个实例化出来的对象所共有,只占一份内存;descriptors是对原型的一个描述。在prototype处放置我们指定的对象,作为一个原型对象,还能对新的对象赋予新的属性

#作用:以指定对象为原型创建新的对象

#为新的对象指定新的属性,并对属性进行描述

由这个方法能创建出一个隐式对象,这个对象会有一个writable的属性, 默认为False 它会阻止对已创建属性的修改,把它的值变为true后就能对已创建的属性进行修改了。对于已创建属性的删除,也有一个阻碍就是configurable,同样它的值也是false,将其修改为true后就能执行删除了。enumerable枚举:for in  循环后一个个列出来,这样可以把后创建的属性而不是自带的属性也列出来。这几个属性的默认值都为False !

object.defineProperties(object,descriptors)

# 作用:为指定对象定义 扩展多喝属性  

get:function(){//获取扩展属性的值,此时它会自动调用  }

惰性求值,只有在要数据的时候才会触发自动调用

set:function(data){//监听扩展属性,当扩展属性发生变化的时候,会自动调用,将变化的值作为实参传入}

Array扩展

arr.indexOf(6)   # 输出第一个6的下标  (Array.prototype.indexOf(value)) #下同

arr.lastIndexOf(6)  # 输出最后一个6的下标 

arr.forEach(function(item,index))     # 输出所有元素的值和下标

arr.map(function(item.....){return .....item +.... ):# 遍历数组返回一个新的数组,返回加工之后的值

arr.filter(function(......))  # 遍历过滤一个新数组,返回条件为true的值。

Function 扩展

function.prototype.bind(obj)   # 将函数内的this强制绑定为obj,不会立即调用而是将函数返回

call 和apply都能绑定this  区别是call 可以直接将参数加在后面:aa.call('abc' ,2,3 ) 而apply则要将参数放入数组中再传参:aa.apply('abc' [2,3]) 

call和apply是直接调用函数,而bind是将函数返回 Bind的好处在于如果遇到回调函数(像是由时间延迟的定时器函数),直接用call 或者apply的话是会出错的,在这里适合用bind 

上一篇 下一篇

猜你喜欢

热点阅读