
JavaScript面向对象编程主要通过原型链、构造函数和ES6的class语法来实现。它们各有特点,也适用于不同的场景。
原型链、构造函数、ES6 Class。
原型链的核心在于每个JavaScript对象都有一个指向其原型对象的内部链接,这个原型对象又有自己的原型,以此类推,直到到达
null
举个例子,假设我们有一个
Animal
Dog
Dog
Animal
立即学习“Java免费学习笔记(深入)”;
function Animal(name) {
this.name = name;
}
Animal.prototype.sayHello = function() {
console.log("Hello, I'm " + this.name);
};
function Dog(name, breed) {
Animal.call(this, name); // 调用Animal构造函数,设置Dog的name属性
this.breed = breed;
}
// 设置Dog的原型为Animal的实例,Dog就可以继承Animal原型上的方法
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog; // 修复Dog的constructor指向
Dog.prototype.bark = function() {
console.log("Woof!");
};
const myDog = new Dog("Buddy", "Golden Retriever");
myDog.sayHello(); // 输出 "Hello, I'm Buddy"
myDog.bark(); // 输出 "Woof!"在这个例子中,
Dog.prototype = Object.create(Animal.prototype)
Animal.prototype
Dog.prototype
Dog
Animal
sayHello
Animal.call(this, name)
Dog
Animal
name
需要注意的是,原型链查找属性的过程是动态的。如果在创建对象之后修改了原型对象,那么所有基于该原型创建的对象都会受到影响。
构造函数模式是JavaScript中创建对象的一种常用方式。它通过
new
优点:
缺点:
instanceof
为了解决方法重复创建的问题,通常会将方法定义在原型对象上,而不是构造函数内部。这样,所有实例共享同一个方法,节省内存。
例如:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("Hello, my name is " + this.name + " and I'm " + this.age + " years old.");
};
const person1 = new Person("Alice", 30);
const person2 = new Person("Bob", 25);
person1.sayHello(); // 输出 "Hello, my name is Alice and I'm 30 years old."
person2.sayHello(); // 输出 "Hello, my name is Bob and I'm 25 years old."在这个例子中,
sayHello
Person.prototype
Person
ES6 引入的
class
class
class
prototype
例如:
class Animal {
constructor(name) {
this.name = name;
}
sayHello() {
console.log("Hello, I'm " + this.name);
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // 调用父类的构造函数
this.breed = breed;
}
bark() {
console.log("Woof!");
}
}
const myDog = new Dog("Buddy", "Golden Retriever");
myDog.sayHello(); // 输出 "Hello, I'm Buddy"
myDog.bark(); // 输出 "Woof!"
console.log(typeof Animal); // 输出 "function"
console.log(Animal.prototype.constructor === Animal); // 输出 true在这个例子中,
Animal
Dog
extends
Dog.prototype.__proto__ = Animal.prototype
super()
class
class
class
class
虽然
class
以上就是JavaScript面向对象编程的三种实现方式的详细内容,更多请关注php中文网其它相关文章!
编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号