继承扩展
通过class声明的对象,用extends关键字进行继承
class Father{
sing(){
console.log("唱京剧")
}
}
class Son extends Father{
}
var s=new Son()
s,sing()
super关键字调用父类构造器,作为函数来用
class Father{
constructor(name){
this.name=name
}
}
class Son extends Father{
constructor(name,age){
super(name)//必须先调用父类
this.age=age
}
}
var s=new Son("小明",12)
console.log(s.name+","+s.age)
注意:当super作为函数式,只能在构造器里调用
super作为关键字来用,当做对象使用
class Father{}
Father.prototype.sex="男"
class Son extends Father{
sing(){
// super()//不能在其他函数调用父类构造器
return super.sex//输出的性别只能调用原型上的,非构造器里的
}
}
var s=new Son("小明",12)
var v=s.sing()//输出父类的
console.log(s.name+","+s.age)
console.log(v)
Proxy 拦截器
用于修改某些操作的默认行为,称为对象的一个拦截器,访问对象时必须先通过这个拦截层,在拦截层里做限定和修改
定义方式
var p=new Proxy({},{
get:function(){
return "你无权访问"
}
})
console.log(p.name)//无权访问
console.log(p.age)//无权访问
get下的参数值 第一个为目标对象,第二个为当前访问属性
var obj={name:"lisi"}
var p=new Proxy(obj,{
get:function(tag,prop){
if(prop=="age"){
return "你无权访问"
}
else{
return tag[prop]
}
}
})
console.log(p.name)
console.log(p.age)
属性和方法
get(对象,属性)在获取时拦截
set(对象,属性)在修改时拦截
has(对象,属性)在判断属性时拦截
deleteProperty在通过delete关键字删除时拦截
ownkey(对象)在调用getOwnProertyNames()方法时拦截
defineProperty(对象,属性)在调用defineProperty方法时拦截
apply(属性,对象,数组)在调用apply时拦截
setPrototypeOf(对象,原型)调用setPrototypeOf时拦截
getPrototypeOf(对象)调用getPrototypeOf时拦截