day02
面向对象/过程
面向过程:开始==>结束:先干什么在干什么
面向对象:对象(属性,方法)
封装/创建/定义
var ibj={
"属性名":'属性值'
"方法名":function(){操作}
}
强调:
1,“”可以不加
2,访问:对象名.属性名 对象名.方法名()
3,访问到不存在的属性返回undefind
4,随时可以添加新属性/新方法
5,for in 遍历对象,必须写为obj[i]
6, 在对象的方法里使用自己的属性值,必须写为ythis.属性名
对this的理解的补充
自定义函数中的this==>当前正在创建的对象
自定义构造函数
1,创建:
function 类名(name,age){
this.name=name
this.age=age
}
2,调用
var obj=new 类名(实参,...)
面试题
继承:父元素的成员,子对象可以直接使用
找父对象:1,对象名.__proto__
2,构造函数名.prototype;
两链一包:作用域链,原型链,闭包
原型链:每个对象的属性一层一层向上找每个人的父对象形成的链结构,自己没有的方法属性会找父对象找
设置共有方法:原型对象.方法名=function(){}
判断自由还是共有
1.obj.hasOwnProperty("属性名");//true是自有,false是共有或者没有
完整公式
if(obj.hasOwnProperty("属性名")){
自有
}else{
if("属性名" in obj){
共有
}else{
没有
}
}
修改 删除
obj.属性名=新值
delete.obj.属性名
原型.属性名=新值
delete.原型.属性名
为老ie添加index of()
if(array.prototype.indexof===undefind){
array.prototype.indexof=functiion(key,starti){
strti===undefind&&(starti=0)
for(var i=starti
if(this[i]==key){
return i
}
}
return -1
}
}
判断x是不是数组
1,判断x是不是继承自Array.prototype
Array.prototype.isprototype(x)
2,x.instanceof Array;
3,Array.isArray(x);
4, Object.prototype.toString.call(x)
自定义继承
1,两个对象的继承
子对象.__proto__=父对象
2,批量继承
构造函数名.prototype=父对象
es6==>class
class 类名 extende 老类{
constructor(name,age,height){
super(name,age)
this.height=height
}
}
闭包:希望保护一个反复使用的局部变量
使用:
1,两个函数进行嵌套
2,外层函数创建出受保护的变量
3,外层函数return出内层函数
4,内层函数操作受保护的变量
防抖节流
function fdjl(){
var timer=null
return function(){
if(timer!=null){
clear Timerout(timer)
}
timer=setTimeout()=>{
操作
},1000)
}
}
保护对象
1,四大特性
{
value:`1001
writable:true;
enumerable:true;
configurable:true;
}
修改 1,Object.defineProperty(对象名,“属性名”,{
writable:true/false
enumerable:true/false
configurable:true/false
})
2,Object.defineProperties(对象名.{
"属性名":{
四大特性
}
。。。
})
三个级别
1,防扩展
object.preventExtensions(x)
2,防密封
object.seal(x)
3,冻结
object.freeze(x)
set get
`object.defindPropeoty(对象名,“属性名”,{
get:()=>{
console.log("设置数据")
}
set:()=>{
console.log("获取数据")
}
对象的深浅拷贝
1,浅:var obj={"name":"obj1"}
var obj2=obj
2,深:
var obj={"name":"obj1"}
var obj1={...obj}
})
或者
后端 var jsonTxt=json.stringify(jsonobj)
前端 var josnobj=josn.parse(jsontxt)
或者 eval("("+jsonTxt+")")
Error
语法错误:SyntaxError
引用错误:ReferenceError
类型错误:TypeError
范围错误:RangeError
让代码报错也能运行:
try{可能出错的代码}catch(err){出错后执行的代码}
但是try性能差,多用分支技术代替
自定义错误:
throw new Error("自定义错误信息")
柯里化函数
function add(a){
return function(b){
return function(c){
console.log(a+b+c)
}
}
}
add(a)(b)(c)
匿名函数回调
(function(){操作}())