JavaScript:面向对象编程


JavaScript(JS)是一种支持面向对象编程(OOP)的语言,尽管它不是传统的基于类的面向对象语言,而是基于原型(prototype-based)的面向对象语言。在JavaScript中,对象可以被视为一组属性(property)和方法(method)的集合,这些属性和方法构成了对象的状态和行为。

对象(Objects)

在JavaScript中,几乎一切都是对象,包括内置对象(如Array, Date, Function等)和用户自定义对象。
创建对象可以通过字面量方式

var person = {
  name: 'John Doe',
  age: 30,
  sayHello: function() {
    console.log('Hello, my name is ' + this.name);
  }
};

构造函数(Constructor functions)

1、构造函数用于创建特定类型的对象实例

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sayHello = function() {
    console.log('Hello, my name is ' + this.name);
  };
}
var john = new Person('John Doe', 30);

原型(Prototypes)

1、每个函数都有一个.prototype属性,用于关联一组方法和属性,这些方法和属性可以被该函数创建的对象实例共享
2、默认情况下,通过构造函数创建的对象实例会有一个隐式原型指针 [[Prototype]](可通过 __proto__Object.getPrototypeOf() 查看),指向其构造函数的 .prototype

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sayHello = function() {
    console.log('Hello, my name is ' + this.name);
  };
}
var john = new Person('John Doe', 30);

原型链(Prototype chain)

1、当试图访问对象的属性或方法时,如果对象本身没有该属性,JavaScript会沿着原型链向上查找

function Person() {}
Person.prototype.sayAge = function() {
  console.log('My age is ' + this.age);
};

var john = new Person();
john.age = 30;
john.sayAge(); // My age is 30

类(Classes)

1、ES6引入了基于类的面向对象编程(Class syntax),这是一个语法糖,实际上底层还是基于原型的机制

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log('Hello, my name is ' + this.name);
  }
}
const jane = new Person('Jane Doe', 28);

继承(Inheritance)

1、JavaScript支持通过原型链实现继承,也可以通过ES6类的 extends 关键字实现类继承

// 原型链继承
function Person(name, age) {...}
function Employee(name, age, jobTitle) {
  Person.call(this, name, age);
  this.jobTitle = jobTitle;
}
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

// ES6类继承
class Person {...}
class Employee extends Person {
  constructor(name, age, jobTitle) {
    super(name, age);
    this.jobTitle = jobTitle;
  }
}
  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

待煎的前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值