1.原型鏈
2.三种不同的继承方式
function Student(name,age){
this.name=name
this.age=age
}
2.1原型链继承:将Animal创建出来的对象 赋值给Dog的原型 将父级的对象 赋值给子级的原型.
问题 :无法对属性进行初始化 ,所有的属性都是固定
Student.prototype.read=function(){
console.log(this.name+'正在讀書')
}
function Purple(name,age){ }
Purple.prototype=new Student("小明",12)
var s1=new Purple("小紅",10)
s1.read()//輸出:小明正在讀書。(而不小紅正在讀書)
2.2冒充继承:通过 call或者apply来改变this的指向性来完成的继承
问题:无法继承原型上的内容
function Purple(name,age){
Student.call(this,name,age)
}
var s1=new Purple("小紅“,10)
s1.read()//輸出:會報錯,因為不會繼承Student的原型
2.3混合继承:通过冒充继承,继承构造函数中的内容,通过原型链继承 继承原型上的内容
function Purple(name,age){
Student.call(this,name,age)
}
Purple.prototype=new Student()
var s1=new Purple("小紅”,12)
s1.read()//輸出:小紅正在讀書
3.call和apply的用法(改变this的指向性)
function Student(name,age){
this.name=name
this.age=age
this.showInfo=function(){
console.log(this.name)
}
this.abc=function(a,b,c){
console.log(this.name+a+b+c)
}
}
var s1=new Student("王一",21)
var s2=new Student('王二',22)
//.call(对象,参数,参数.....) 改变this的指向
// 第一个参数:更改this指定到的对象
// 后面的参数就是当前方法需要的参数
s1.abc.call(s2,2,3,4) //輸出:王二234
//.apply(对象,[参数,参数,参数,...]) 改变this指向 ,还可以改变 传参的方式 , 用数组传参
s1.abc.apply(s2,[2,3,4])
//Math.max() 一组数中 最大的数;Math.min() 一组数中 最小的数
var arr=[20,230,123,124,12]
var max=Math.max(arr)
var max=Math.max.apply(null,arr)
4.set,get的作用及目的
私用屬性只能通过方法修改不能直接修改,通过特定的方法 访问以及修改
set設定或修改私用屬性;get取得私用屬性