保护对象

75 阅读3分钟

1、保护对象:保护对象的属性和方法 1、每个属性都有四大特性: { value: '很多', //实际保存值的地方 writable: true, //开关,控制着这个属性是否可以被修改 - 默认值为true enumerable: true, //开关,控制着这个属性是否可以被for in循环遍历到 - 默认值为true configurable: true //开关,控制着这个属性是否可以被删除 - 默认值为true,总开关:一旦设置为法拉瑟,其他特性不可以在修改,而且他本身也是一旦设置为false,不可逆 }

	修改四大特性:
		1Object.defineProperty(对象名,"属性名",{
				四大特性
			})

			调用一次方法只能保护一个属性的四大特性

		2Object.defineProperties(对象名,{
				"属性名":{四大特性},
				...
			})

			至少方法只调用了一次,但是四大特性写着始终麻烦,甚至不能防止添加

2、三个级别:
		//1、防扩展:防添加
		Object.preventExtensions(obj);

		//2、密封:防添加防删除
		Object.seal(obj);

		//3、冻结:防添加防删除防修改
		Object.freeze(obj);

保护对象不重要:为什么说他垃圾?
	1、如果你不用面向对象开发,那你也没有对象可以保护
	2、前辈们都没有保护,我们也不用保护
	3、别人一般来说都不可能知道你取得对象名字叫什么

***四大特性,其实应该叫六大特性 - 可以帮助我们做出动态数据,以后不会手动使用,只是明白Vue底层就是用到了set拦截操作
		Object.defineProperty(lhl,"name",{
			get:()=>{
				console.log("获取数据会进行拦截操作");
			},
			set:v=>{
				console.log("设置数据会进行拦截操作"+v);//v拦截到的数据
				h1.innerHTML=v;
			},
		})

2、*对象的深浅拷贝: 1、浅拷贝:利用按值传递 var obj1={"name":"obj1"}; var obj2=obj1;

2、深拷贝:两者互不影响
	var obj1={"name":"obj1"};
	var obj2={...obj1};

3、*以后如何脱掉后传来的数据的衣服:
	后端穿衣服:var JSONtxt=JSON.stringify(obj); - Node.js就是这句话,Node.js也是“js”,历史上第一次一门语言可以通吃前后端
	前端脱衣服:var jsonObj=JSON.parse(JSONtxt);
	此方法也能实现深拷贝

3、*Error对象:错误 1、以后工作/学习的目的: 1、快速找到错误 2、记住要防用户

2、***浏览器自带4种错误类型:可以快速找到自己的错误
	1、语法错误:SyntaxError - 一定是你的符号/语法写错
	2、引用错误:ReferenceError - 没有创建就去使用了
	3、类型错误:TypeError - 不是你的方法,你却去使用了
	4、范围错误:RangeError - 只有一个API会碰到:num.toFixed(d);//d取值范围:0~100之间

3、只要发生错误,就会报错,会导致后续代码终止(闪退),我们不希望
	错误处理:就算发生错误,我们也不希望报错,而是给出一个错误提示,让后续代码依然可以继续执行!
	语法:
		try{
			只放入你可能出错的代码
		}catch(err){
			发生错误后才会执行的代码
			err形参就保存着错误的消息,只不过是英文的,中国人不一定看得懂,所以建议你添加上中文的错误提示
		}
	try...catch...的性能非常的差,几乎事所有代码里性能最差的,放在try中的代码效率都会被降到最低
	*可以用一个技术代替他:分支技术!
	*开发经验的累计:记住一切的客户端输入/用户输入都是坏人 - 但是你不担心,只要你做还要防护就不会出错(!isNaN、正则)

4、抛出自定义错误:只要是错误,后续代码都不会执行
	throw new Error("自定义错误消息")

5ES5:严格模式
	开启:"use strict" - 写在任何一个作用域的顶部都可以
	作用:
		1、禁止了全局污染,使用变量之前必须先创建变量
		2、将静默失败升级为报错
	铺垫:以后我们用了gulp技术打包项目后,有的js会自动加上严格模式,我劝你把他删掉

4、柯里化函数: function add(a){ return function(b){ return function(c){ console.log(a+b+c) } } }

		add(3)(5)(7);