ES5 特性学习笔记
1、严格模式
在严格的条件下运行JavaScript
- 声明:“use strict”;
- 优势:
- 消除代码不安全之处,保证代码的安全性。
- 提高编译效率,增加运行速度
- 为以后JavaScript做好铺垫
- 要求:
- 不允许使用未声明的变量
- 不允许删除变量、对象和函数,以及不能删除的不允许删的属性
- 不允许变量重名
- 不允许使用八进制
- 不允许使用转义字符
- 不允许对只读属性赋值
- 不允许使用getter获取的属性进行赋值
- 变量名不能使用eval\arguments
- 禁止this指向全局对象
- 新增一些保留字
implements interface let package private protected public static yield
2、json
- JSON.parse
- 将文本转化为JavaScript对象
- JSON.stringif
- 将JavaScript转化为JSON格式字符串
3、对象方法
- 添加或者更改对象属性
Object.defineProperty(object,property,descriptor) - 添加或者修改多个对象属性
Object.defineProperties(object,descriptors) - 访问属性
Object.getOwnPropertyDescriptor(object,proper5ty) - 以数组形式返回所有属性
Object.getOwnPropertyNames(object) - 以数组的形式返回所有可枚举的属性
Object.keys(object) - 访问原型
Object.getPrototypeOf(object) - 阻止对象添加属性
Object.preventExtensions(object) - 判断是否可添加属性到对象
Object.isEXtensions(object) - 防止更改属性
Object.seal(object) - 防止对象进行任何修改
Object.freeze(object) - 遍历对象 for in
4、四大数据属性
writable 只读性(是否可修改)
enumerable 可遍历性
configurable 是否可更改配置
value 属性值
5、get以及set方法
- getter:
get(){}//当对象获取属性值时调用 - setter:
set(){}//当对象设置属性值时调用
6、数组方法
- indexOf
- astIndexOf
- every
判断数组中元素是否都满足条件 返回布尔值 - some
判断数组中元素是否有满足条件的元素,返回布尔值 - forEach
对每个数组元素调用一次函数(类似for循环) - map
操作每个数组元素,返回新数组 - filter
过滤器,返回满足条件的元素组成的新数组 - isArray
- 判断是否为数组
- 本质原理:
Object.prototype.toString.call(val)
- 其他方法
obj instanceof Array 判断原型链上
obj.constructor ===Array 判断原型上 - reduce
计算数组总和arr.reduce((pre,next)=>{ return pre+next; })
- reduceRight
7、实现继承
- 原型链继承
function SuperType(){
}
function SubType(){
}
SubType.prototype = new SuperType();
原型属性以及方法会被所有实例共享,修改其中一个实例原型中的值,将会使所有都修改。
子类不能像超类传参
- 借用构造函数继承
function SuperType(){ }
function SubType(){
//继承了 SuperType
SuperType.call(this);
}
无法继承超类原型里的属性与方法;方法都在构造函数中定义,函数无法实现复用。
-
组合继承
将原型链与借用构造函数结合使用
function SuperType(){ }
function SubType(){
//继承了 SuperType
SuperType.call(this);
}
SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType
需要调用两次超类
- 原型式继承
function object(o){
function F(){};
F.prototype = o; //复制了一份对象放于原型中
return new F();
}
ES5通过新增Object.create()方法规范了原型式继承
两个参数 第一个:用作新对象原型的对象,第二个:额外属性的对象
与原型一样,原型对象被所有实例共享
-
寄生式继承
与原型式继承密切相关。在原型式继承外加一层函数
function createAnother(original){
var clone = object(original);
clone.key = val //设置额外属性
return clone;
}
不能做到函数复用
- 寄生组合式继承
function inheritPrototype(SubType,SuperType){
var prototype = object(SuperType.prototype)
prototype.constructor = SubType;
SubType.prototype = prototype
}
function SuperType(){ }
function SubType(){
//继承了 SuperType
SuperType.call(this);
}
inheritPrototype(SubType,SuperType)