原型链继承

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、全局变量变量在函数外部定义的,既可以在函数内调用,也可在函数外部调用的变量,称为全局变量。页面关闭之后才会销毁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值