面向对象

面向对象语言

面向对象语言(Object-Oriented Language)是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分,有识认性、多态性、类别性和继承性四个主要特点。

中文名: 面向对象语言
外文名:Object-Oriented Language
主要特点:面向对象语言刻画客观系统较

原型对象

在JavaScript中,没有类的概念,对象的产生是通过原型对象而来的。这里,我将对JavaScript中的原型对象进行简单介绍。

在JavaScript中,每一个对象,都有一个原型对象。而原型对象上面也有一个自己的原型对象,一层一层向上找,最终会到达null。这听起来感觉有点复杂,我将通过一张图来进行解释,如下图:

通过上图,我们可以得到以下结论:
1.JavaScript 中每个对象都有一个原型对象。可以通过__proto__属性来访问到对象的原型对象。
2.通过__proto__属性一直向上寻找原型对象的话,最终会找到null。
3.构造函数的prototype属性指向一个对象,这个对象是该构造函数实例化出来的对象的原型对象。
4.JavaScript中的根对象是Object.prototype对象。Object.prototype对象是一个空对象。
5.JavaScript中的每一个对象,都是从Object.prototype对象克隆而来的。Object.prototype对象就是它们的原型。而Object.prototype对象的原型为null。

创建一个对象(类)

语法:

let obj = {
    name:"zhangsan",
    age: 18
};
let obj2 = Object.create(obj, {
    gender: {
        value: "male",
        writable: false,  //设置不能被更改
        enumerable: true //是否能被遍历
    },
    sayHello: {
        value:function () {
            return "你好!,zhangsan";
        }
    }
});
obj2.gender="falmale";
console.log(obj2.name + "    " + obj2.age + "    " + obj2.gender + "   "+obj2.sayHello());

构造函数

定义:用函数来模拟其它面向对象语言中的类,规则(函数名首字母大写)

//宠物类
let Pet=function (name,types) {
    this.name=name;
    this.types=types;
};
//将相同的方法或属性放在原型链上,方便代码的复用
Pet.prototype.say=function(){
    return `hello!我叫:${this.name},我是一只可爱的${this.types}`;
};

//创建一个狗类
let dog=new Pet("泰迪","小狗");

console.log(dog.name+"    "+dog.types+"   "+dog.say());


ES6语法:
//宠物类
class Pet{
    constructor(name,types){
        this.name=name;
        this.types=types;
    }
    //将放在原型链的属性或方法写在constructor外
    say(){
        return `hello!我叫:${this.name},我是一只可爱的${this.types}`;
    }
}
let cat=new Pet("小猫咪","猫类");
console.log(cat.name+"    "+cat.types+"     "+cat.say());

静态方法

定义:不需要实例化,可以直接调用
ES5:
//宠物类
let Pet=function (name,types) {
    this.name=name;
    this.types=types;
};
//将相同的方法或属性放在原型链上,方便代码的复用,静态方法
Pet.say=function(){
    return `hello!我叫:${this.name},我是一只可爱的${this.types}`;
};
console.log(Pet.say());


ES6:
//宠物类
class Pet{
    constructor(name,types){
        this.name=name;
        this.types=types;
    }
    //将放在原型链的属性或方法写在constructor外
    static say(){
        return `hello!我叫:${this.name},我是一只可爱的${this.types}`;
    }
}
console.log(Pet.say());
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值