1、自己写一个原型链继承,独立完成原型链图
function Bird(name,age,color){
this.name=name
this.age=age
this.color=color
}
Bird.prototype.fly=function(){
console.log(this.name+"正在飞")
}
Bird.prototype.eat=function(){
console.log(this.name+"正在吃")
}
function Parrot(name,age,color){
Bird.call(this,name,age,color)
}
Parrot.prototype=new Bird()
Parrot.prototype.speak=function(){
console.log(this.name+"正在说话")
}
var a1=new Parrot("咕咕",2,"黄色")
console.log(a1)
a1.speak()
2、创建一个人类然后继承学生类以及教师类,分别通过三种不同的继承方式,总结优点缺点
function People(name,age){
this.name=name
this.age=age
}
People.prototype.move=function(){
console.log(this.name+"正在移动")
}
People.prototype.eat=function(){
console.log(this.name+"正在吃")
}
//原型链继承:将原型改成对应的对象
//问题:无法初始化对应的属性
function Student(name,age){
}
Student.prototype=new People("王一",18)
Student.prototype.study=function(){
console.log(''正在学习")
}
//冒充继承法:通过call或者apply改变原有函数的this指向,实现的
//无法将原型中所带有的方法和属性继承过来
function Teacher(name,age){
People.call(this,name,age,color)
}
Teacher.prototype.teach=function(){
console.log(this.name+"教人学习")
}
var t1=new Teacher("张三",35)
console.log(t1)
//组合继承:冒充继承+原型继承
3.整理call(),apply() 使用方式 举例 以及 区别 Math.max Math.min
//.call(对象,参数,参数2,参数3) 更改方法this指向
//.apply(对象,[ ]) 改变this的指向
function Student(name){
this.name=name
this.showName=function(){
console.log(this.name)
}
this.abc=function(a,b,c){
console.log(this.name+a+b+c)
}
}
var s1=new Student("王一")
var s2=new Student("张三")
s1.showName() //王一
s1.showName.call(s2) //张三
s1.abc.call(s2,1,2,3) //张三123
var arr=[1,2,3]
s1.abc.apply(s1,arr) //王一123
s1.abc.apply(s2,[1,2,3]) //张三123
// Math.max() 求一组数的最大值
// Math.min() 求一组数的最小值
var arr=[70,80,60,44,55]
var result=Math.max.apply(null,arr)
console.log(result) //80
Math.min.apply(null,[1,2,3]) 等价于 Math.min(1,2,3) //1
4.面向对象 set get 作用以及目的 如何实现私有属性
set的意思为设置,get的意思为获取
get()和set()两个方法分别是用来获取和设置数据的
set是从外部设置内部的私有变量的值
get是从外部获取内部私有变量的值
私有变量:1、可以在内部类,记录下来更改的情况,且或者起到限制约束的作用
2、面向对象中最重要的是封装,而private正好提供了封装,在实体类中成员初始由set(){}引进来的值,可以被get(){}在外部使用而无法进行改变
私有属性:必须通过方法才能访问或者修改 一.需要一定安全性的属性 比如密码
二.有一定的校验规则
5.作用域问题
作用域是可访问变量的集合。在js中,对象和函数也同样是,所以js作用域可访问的变量、对象、函数的集合。所以作用域主要是针对变量的,对变量进行分类
1、局部变量变量在函数内部声明,变量为局部作用域。局部变量就是只能在函数内部访问的变量。在函数执行完毕之后销毁
2、全局变量变量在函数外部定义的,既可以在函数内调用,也可在函数外部调用的变量,称为全局变量。页面关闭之后才会销毁