2020917王杉
学习内容:
面向对象:
-
静态方法:
-
定义:不需要创建子对象,就可用构造函数直接调用的方法,其实就是将全局函数,找到地方保存而已
-
使用静态方法:其实就是把全局函数,强行添加给某个构造函数对象。具体添加到哪个构造函数,要看这个函数做的事儿和谁家的名称更接近
-
常见的静态方法:
①Array.isArray(obj):判断任意对象是否为数组
②Object.defineProperties(obj,props):直接在一个对象上定义一个或多个新的属性或修改现有的属性,并返回该对象
③Object.setPrototypeOf(obj,prototype):将一个指定的对象的原型设置为另一个对象或者null(既对象的[[Prototype]]内部属性)
-
-
自定义继承
-
定义:如果觉得一个对象的整个父对象都不好用,就可以更换这个子对象的父对象
-
使用自定义继承:
①只修改一个对象的父对象(修改两个对象间的继承关系) 对象.__proto__=新父对象 Object.setPrototypeOf(子对象,新父对象) var father=Object.getPrototypeOf(child)
②同时修改多个子对象的爹(修改构造函数原型对象,来修改所有子对象的父对象) 构造函数.prototype=father
-
仅基于现有父对象,创建子对象,并扩展自有属性: Object.create()
①创建新子对象,继承父对象,扩展子对象自有属性:
四大特性:value(属性值)、writable(控制是否修改当前属性值)、enumerable(控制是否可用for in遍历这个属性)、configurable(1.是否可以删除该属性2.是否可以修改前两个特性)
-
ES5:
-
ES5:(核心语法)JavaScript=ECMAScript(核心语法) + DOM(操作网页) + BOM(操作浏览器窗口) (js中很多缺陷 通过ES5添加功能)
-
严格模式:(比一般JavaScript运行机制要求更严格的模式)
- 严格模式分类:①整个块代码或者js文件中1启用 在代码块或js文件的开头插入: "use strict"; ②在一个函数内启用 在function内,函数体顶部插入: "use strict";
- 严格模式的规定:①禁止给未声明变量赋值 ②静默失败升级为错误③普通函数调用或匿名函数自调中的this不再默认指向window,而是undefined④禁止使用 arguments.callee
-
JSON对象:(以js对象数据格式表示出来的字符串,轻量级的文本数据交换格式)
- JSON数据的基本格式:"名":值 对
- 多个数据间使用 , 分隔{"ball":true,"walk":false}
- JSON描述对象使用花括号保存对象:"sport":{"ball":true,"walk":false}
- JSON保存数组:"sport":["ball","walk"]
文件交换:
JSON.parse(string/json)
var json='{"x":60,"y":30}';
var jsObj=JSON.parse(json);JSON.stringify(object)
var obj={
name:"lili",
age:20
}
var jsonObj=JSON.stringify(obj) -
对象保护:
-
保护js中的对象,它们没有自保能力随时可以替换添加删除它们的属性
-
保护对象:命名属性是可以直接使用“.”访问到的属性
(上面说到过的四大特征)保护单个对象的
①数据属性:获取四大特性修改使用其特性
②访问器属性:自定义规则保护属性
(1)将实际属性隐藏起来,半隐藏
(2)请一个假属性保护它,假属性要顶替原属性的名字
(因为js是不严格的语言,所以,一旦外人知道受保护的半隐藏的属性名,依然可用 . 直接访问,绕过保镖)
-
内部属性:不能用“.”访问到的属性
①_proto__②class③extensible
-
防篡改:
①防拓展:Object.preventExtensions(obj)
②密封:Object.seal(obj)
③冻结:Object.freeze(obj)
-
-
Object.create():
-
使用:
①创建一个子对象,并让新子对象继承指定的父对象
②给子对象添加自有属性,必须是以Object.defineProperties类似的语法添加属性
-
学习心得:
今天学习了很多东西,有些东西有点绕,需要花时间去理解,然后就是还需要学习的太多了,加油!
评论