9-17 钟申义 日志

9-17 钟申义 日志

静态方法

使用静态方法
定义一个函数,判断任意一个对象是不是数组

function isArray(obj){
return Object.prototype.toString.call(obj)=="[object Array]";
}

为数组添加构造函数

Array.isArray=function(obj){ ... }

调用

Array.isArray({x:1, y:2})

常见的静态方法
Array.isArray(obj) 判断任意一个对象是否为数组
Object.defineProperties(obj,props) 直接在一个对象上定义一个或多个新的属性或修改现有的属性,并返回该对象 obj将要被添加的属性或修改的属性 props该对象的一个或多个键值对,定义了将要为对象添加或修改的属性
Object.setPrototypeOf(obj,prototype)将一个指定的对象的原型设置为另一个对象或者null(既对象的[[Prototype]]内部属性) obj将被设置原型的对象 prototype该对象新的原型(可以是一个对象或者null)

自定义继承

只修改一个对象的父对象(修改两个对象间的继承关系)

对象.__proto__=新父对象 不推荐,__proto__有的浏览器不能用,有兼容性问题 Object.setPrototypeOf(子对象,新父对象) 设置子对象继承指定父对象,功能等效于 对象.__proto__=新父对象 var father=Object.getPrototypeOf(child) 获得子对象的父对象

同时修改多个子对象的爹(修改构造函数原型对象,来修改所有子对象的父对象)

构造函数.prototype=father

严格模式

开起严格模式
在代码块或js文件的开头插入: "use strict";
在function内,函数体顶部插入: "use strict";
严格模式规定
禁止给未声明的变量赋值
静默失败升级为错误
普通函数调用或匿名函数自调中的this不再默认指向window,而是undefined
禁止使用 arguments.callee

JSON对象

JSON语法规则
JSON数据的基本格式:“名:值” 对 “name”:"leilei"
多个数据之间使用逗号分隔 "name":"leilei","sex":0
JSON字符串可以描述一个对象,使用花括号保存对象
JSON字符串还可以描述一个数组,使用方括号保存数组
JSON文档与对象的转换
JSON.parse(string/json) 反序列化操作,解析JSON字符串得到JavaScript对象
JSON.stringify(object) 序列化操作,将JavaScript对象转换为JSON字符串

对象的保护

保护单个对象的属性(2大类)
四大特性

value : 实际为属性保存的属性值

writable : true/false控制是否可修改当前属性

enumerable : true/false控制是否可用for in遍历这个属性

configurable : ture/false 1. 是否可删除该属性 2. 是否可修改前两个特性 注意:configurable一旦改为false,不可逆

获取一个属性的四大特性

var attrs=Object.getOwnPropertyDescriptor(obj,"属性名")

修改一个属性中的特性

错误做法:直接用" . ",进行访问修改

正确做法:使用专门的函数进行修改 Object.defineProperty(对象,"属性名",{
开关 : true/false,
... : ...
})

特性的默认值

用 . 添加的新属性,特性的默认值为true

defineProperty/defineProperties添加的新属性,特性的默认值为false

访问器属性

Object.defineProperty(book,"bage",{
get:function(){
return this._bage;
},
set:function(value){
// value会自用接住这次要赋的新值
if(value>=18 && value<=60){
this._bage=value;
}else{
throw Error("年龄超范围!")
}
},
configurable:false,
enumerable:true
})

防篡改(3个级别)
防扩展

设置防扩展 Object.preventExtensions(obj)

判断是否已禁止扩展 Object.isExtensible(obj)

密封

密封对象Object.seal(obj)

判断是否密封Object.isSealed(obj)

删除对象 delete obj.属性名

冻结

冻结对象Object.freeze(obj)

判断是否冻结Object.isFrozen(obj);

冻结原理 不但禁止添加新属性,且自动修改所有configurable:false,且自动修改所有writable:false

心得

感觉今天的有点绕,且不容易记住!那些方法的英语名称太难记了!

标签

评论


© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1