初识面向对象

万物皆对象

面向对象中分了:对象和类的概念
什么是对象第一句话,想比大家都不陌生;我们重点来讨论什么是类!

对象是类的实例
类是对象的抽象

在代码中类好比是一个模板,用于批量生产,而且有共同的特征;
如何实现:
es5:混合模式:构造函数+原型模式(代码)

function People(name,age){//构造函数模式
this.name=name;
this.age=age;
}
People.prototype.study=function(){}//原型模式

es6 关键字class

class Student{
            constructor(name){//构造器,构造函数
                this.name = name;
                this.age = 18;
                console.log(666);
                this.gender = "female";
            }
            say(){
                console.log("hello");
            }
        }

得到一个模板类,如何用它,就需要new;

let stu1 = new Student ("小明")//Student {name: "小明", age: 18, gender: "female"}

这里我们在说说new它是如何操作的。

第一步:创建一个空对象o;
第二部:将该空对象的_proto_指向创建对象(Student)的原型prototype;
第三步:将创建对象的this环境指向该空对象,并执行代码;
第四步:将该空对象,返回变量;
代码:

   obj1=(function(){
      var o={};
      o.__proto__=obj.prototype;
       obj.call(o,"hello")
        return o;
    })();

面向对象三大特征

  • 封装
    隐藏内部细节,不暴露在外面;信息的隐藏;
    具体就是对于属性和方法的封装;
  • 继承
    子类继承父类的所有方法和属性,并且扩展自己的属性和行为。
    如何实现:
    es5:方法借用+原型继承。
    方法借用
function Student(name,age,grand){
    People.call(this,name,age);
    this.grand=grand;
}
function foo(a,b){
    console.log(this.name,a,b);
    let zs={name:"张三"};
    let ls={name:"李四"};
    console.log(foo.call(zs,1,2));//张三 1 2
    console.log(foo.apply(ls,[3,4]));//李四 3 4
    let bar=foo.bind(zs);
    console.log(bar(5,6));//张三 5 6
}

原型继承

Student.prototype=Object.create(People.prototype)

Object.create原理步骤:
第一步:创建一个空方法;
第二步:将该方法的prototype指向people原型;
第三步:返回该函数;

Object.create=function(People.prototype){
    var o=function(){};//创建一个新函数
    o.prototype=People.prototype;//将该函数原型等于people原型
    return o();//返回该函数
}
  • 多态

方法(行为)同的行为不同的实现
代码中的多态
重载
参数的不同,实现不同
js自带
重写
父亲的行为,儿子重写一个覆盖了

this指向
1.箭头函数没有自己的this,它借用声明环境中的this;
2.事件监听函数中,this指向绑定监听函数的那个元素节点(谁绑指向谁);
3.谁调用指向谁;
4.当一个函数没有被调用时,this指向全局window,全局模式下,this等于undefined;
5.面向对象new的时候,this指向新创建的空对象;

原型(prototype)
扩展:所有Function创建的函数,都叫做函数对象;
规则:
1.所有的函数对像都有一个原型对象(prototype);
2.所有的对象上都有一个隐式原型(proto),指向创建该对象的构造函数的原型(proyotype);
3.所有的原型对象身上都有一个constructr指向该原型所在的构造函数本身;

判断某个实例对象是否属于某个抽象类;必须是复杂数据类型;
实例instanceof类
在这里插入图片描述
原型链:

一个对象通过自身属性“——proto——”一直向上直到null所构成的链条就是我们的原型链;
作用
用来找属性,当一个对象在访问自身的属性xx时,会现在自己身上找,如果没找到,通过原型链——proto__层层向上找,直到找到为止,或者找完整个原型链都没有,那么就返回undefnd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值