js的面对对象,继承

js的面对对象

js是一个基于对象的语言,在es6之前,js是使用了构造函数来模拟类,使得js也可以面对对象来编程,es6中加入了类的定义

创建对象的方式

通过字面量的方式创建


let obj={
    name:"小明",
    age:12
}

//实例化对象创建对象
let person = new Object()
person.name ="小明"
person.age ="12"

工厂模式创建对象

function createObject(name,age){
    let person = new Object()
    person.name = name
    person.age = age
    person.eat = function(){
        console.log("吃饭")
    }
}

构造函数方式创建

function Person(name,age){
    this.name = name
    this.age = age
    this.eat =function(){
        console.log("吃面")
    }
}

检查对象中是否有该属性

1.in name in person

2.hasOwnProperty方法person.hasOwnProperty("name")

区别:in检查对象中是否有该属性,特点是通过继承的属性他也会检查到是属于当前对象的

hasOwnProperty通过继承的属性返回false,自身拥有的属性才返回true

删除属性delete

delete person.name

继承

实现继承的目的:

实现数据共享,节省内存空间

当我们通过一个类创建了50个对象,然后我们如何给它添加新方法呢,给构造函数的原型对象prototype添加方法即可,那这50个对象都会拥有这个方法

子类如何继承父类

1.使用apply方法和call方法

//父类
functon Human(name){
    this.name = name
}

//子类
function Man(name,job){
    //实现继承
    Human.call(this,name) //call(this,参数)
    //Human.apply(this,数组)
    this.job = job
}

2.使用prototype

//父类
function Human(name){
    this.name = name
}
Human.prototype.work=function(){
    console.log("eat")
}
//子类
function Man(name,job){
    this.name =name
    this.job = job
}
Man.prototype = Human.prototype

let man= new Man("小白","老师")
man.work() //eat

js中实现继承是靠prototype这个属性,构造函数都有一个原型对象prototype,原型对象中有一个构造器constructor它指向了构造函数,通过这个构造函数实例化的对象中都有一个proto属性它指向了原型对象

es6定义类的方式
es6实现继承:Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。

class Person{ //定义类
    constructor(name,age){
        this.name = name 
        this.age =age
    }
    eat(){
        console.log(this.name+"吃饭")
    }
    play(){
        console.log(this.name+"打篮球")
    }
}

//继承extends
class Man extends Person {
    constructor(name,age,job){
        super(name,age) //继承父类的属性
        this.job = job
    }
    eat(){
        super.eat() //调用父类方法
    }
}
let a = new Man("小米",10,"laos")
a.eat()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值