9.17 冯娜

学习日志
一、静态方法:

1、什么是静态方法:不需要创建子对象,就可用构造函数直接调用的方法,其实就是将全局函数,找到地 方保存而已。

2、为什么使用静态方法:有些函数不限制调用函数的对象的数据类型,什么类型的对象,都可使用。绝对 的不能放在原型对象中,原型对象中的方法,按规定,只能被自己家的孩子调 用,别人家的孩子,用不了。但是放全局又不好,因为极易被污染。

3、什么时候使用静态方法:只要一个函数不限制调用它的对象的数据类型,任何类型的对象都能使用这个函 数,就要用静态方法。

4、使用静态方法:

(1)定义一个函数,判断任意一个对象是不是数组。

(2)为数组添加构造函数:判断返回值是否为数组,若是则返回true,若否则返回false.

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

(3)调用:

5、常见的静态方法:

(1)Array.isArray(obj):判断任意一个对象是否为数组。

(2)Object.defineProperties(obj,props):方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

二、自定义继承:

1、什么是自定义继承:如果觉得一个对象的整个父对象都不好用,就可以更换这个子对象的父对象。

2、什么时候使用自定义继承:程序中,只要觉得当前的原型对象里没有自己想要的成员,想用别的类型的 原型对象里的成员,就可以更换当前对象的__proto__指向新的父对象。

3、使用自定义继承:

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

(2)同时修改多个子对象的爹

4、仅基于现有父对象,创建子对象,并扩展自有属性:Object.creste()

(1)创建新子对象,继承父对象,扩展子对象自有属性

(2)常用方法:模拟实现Object.creste()

三、ES5:

1、什么是ES5:ES5 是 ECMAScript 的第5个升级版本;JavaScript=ECMAScript(核心语法) + DOM(操作网页) + BOM(操作浏览器窗口)。

2、为什么使用ES5:JavaScript 中有很多缺陷,通过 ES5 为 JS 添加新的功能。

3、严格模式:

开启严格模式:

(1)整个代码块或js文件启用严格模式:在代码快或js文件的开头插入:"use strict"。

(2)仅在一个函数内启用严格模式:在function内,函数体顶部插入: "use strict"。

(3)严格模式规定:

a、禁止给为声明的变量赋值

b、静默失败升级为错误

c、普通函数调用或匿名函数自调中的this不再默认指向window,而是undefined。

d、禁止使用arguments.callee。

四、JSON对象

1、什么是JSON:JSON(JavaScript Object Notation),JavaScript对象表示法,以 js 对象的数据格式表示出 来的字符串,轻量级的文本数据交换格式。广泛使用于存储和交换文本数据领域,作用与 XML类似,但比XML更简洁、更快、更容易解析。

2、语法规则:

a、 JSON数据的基本格式:“名:值” 对。

b、多个数据之间使用逗号分隔。

c、 JSON字符串可以描述一个对象,使用花括号保存对象。

d、 JSON字符串还可以描述一个数组,使用方括号保存数组。

3、JSON文档与对象的转换

(1)JSON.parse(string/json) 反序列化操作。

(2)JSON.stringify(object) 序列化操作。

五、对象的保护:

1、为什么使用对象的保护:JS 中的对象,毫无自保能力,随时可以添加新属性,可以删除现有属性,随时 可以修改属性值为任意值。

2、什么时候使用:当我们不希望用户对对象的内容和结构执行非法的操作时,都要对对象提供保护。

3、保护对象(保护属性和保护结构)

(1)保护单个对象的属性

(2)防止篡改:

a、防扩展

b、密封

c、冻结

案例:

问题://对象的保护
var obj={
name:"pp",
sex:"man",
age:20
}
//让age属性隐姓埋名
Object.defineProperty(obj,"_age",{
value:obj.age,
configerable:true,
writable:true
})
//给age请保镖
Object.defineProperty(obj,"age",{
//保镖只要请了,就是一对儿
//当有用户请求的时候
get:function(){
return obj._age
},
//当有用户修改属性时
set:function(value){
//value就是我们修改的值
if(value>=18 && value<=60){
obj._age=value
}else{
throw Error("超出年龄限制")
}
},
enumerable :true,
configerable:false,
})
//请求age
obj.age=30
console.log(obj.age)

改变age的值,真实改变的只有保镖的值嘛?

评论