构造函数
命名大驼峰
用途:快速构建固定结构的对象
矩形构造函数:快速创建矩形对象
function ReactAngle(length,width){
// this表示new出来的新对象,初始值为{}空的
console.log("this:",this)
this.length=length
this.width=width
this.area=function(){
console.log(this.length*this.width)
}
//影藏代码:new构造出的新对象
// return this
}
//ReactAngle(1000,450)//不要直接调用。否则其中的this代表window,会在全局区添加内容
// new:运算符 作用:创建新对象
var r2=new ReactAngle(100,50)
console.log(r2)
r2.area() this问题和作用域链问题 闭包:内部函数使用外部函数所在作用域中的变量为闭包 this指向:函数执行时所在对象
var a="全局区"
;(function(){
var a="闭包"
window.show=function(){
console.log("a:",a)//作用域链(对象没有作用域往上层找,作用域:全局的块级的函数的)
console.log("this.a",this.a)//函数执行时所在作用域
}
})()
show()
构造函数的prototype原型对象
默认带有属性1:constructor--其所在的构造函数
原型 __proto__原型对象是个{}也具有原型 操作原型链,模仿第三方框架,扩充系统方法 伪数组像数组却不能用数组的方法,将原型改为数组类型即可 Object.setPrototypeOf(x1,pt)//参数1的__proto__改为参数2 对象属性遍历 for ...in...:可以遍历对象自身及其原型中的所有属性 Object.keys:获取对象的直属属性 列:判断空对象 console.log(Object.keys({}).length==0)
精确配置对象属性
参数1:要配置的对象
参数2:属性名,要求字符串
参数3:具体配置内容
Object.defineProperty(obj,"id",{
writable:false
configurable:false//不可删
enumerable:false//可遍历
value:1001//默认值 })
obj.id=999//重写id严格模式报错:无法修改
配置多个属性
参数1:对象名
参数2:配置项
Object.defineProperties(emp,{
id:{
writable:true,
value:1002
}
})
getter和setter
读值getter:对象.属性名
赋值setter:对象.属性名=值
throw Error//返回系统报错
保护对象的方式:
Object.preventExtensive(user)//不可增
Object.seal(user)//不可增删
create(原型对象,属性的配置)
作用:创建对象时,指定对象的原型并设置对象的属性
var user={name:"亮亮" }
var emp=Object.create(user,{
id:{value:10001,enumerable:true},
age:{value:38,enumerable:true}
})
console.log(emp)
对象类型:对象,数组,关联数组
关联数组:数组中的属性名有数字也有字符
列:names["category"]="数组"
常用数组方法 数组every方法:函数返回值是一个布尔值,所有为真返回true
数组some方法:函数返回值是一个布尔值,有一个为真返回true
数组filter方法:函数返回的是满足条件的函数构成的一个新的数组
数组map方法:利用映射原理修改对象中元素的值:通过一个规则把元素改为另一个样子
需制作一个新的对象进行返回,不要在item上直接修改,这样会影响到原数组的对象,,因为对象是地址储存,引用 类型
foreach单纯遍历数组,没有返回值
reduce合并/归纳
遍历数组的方式
for循环:复杂难用
foreach:数组类型频繁使用
for..of:遍历数组类型的value值
for..in:遍历对象类型的key值(属性名) 类数组类型用for...of循环 前端开发的框架都用严格模式(use strict) freeze冻结对象无法增删改
严格模式window中的this指向undefined
严格模式禁用callee:递归需要多次循环调用,argument会消耗大量资源
匿名函数自调用实现递归 var res=(function(n){ if(n>1){return n*arguments.callee(n-1)} return 1 })(5) 其他: 模板字符串拼接:\转义字符,可在模板字符串中输入关键词
三大作用域之块级作用域:{}搭配let、const使用
函数搭配{}也是块级作用域 函数的bind方法:bind会把对象和函数捆绑在一起
调用时,使用自身捆绑的对象而非默认的所在对象
bind的用途,与setInterval连用改变this指向,
当一个函数把值传递给setInterval,其值所在作用域改变,变为setInterval所在对象