这里给您介绍js面向对象的写法的完整攻略。
目录
- 面向对象基本概念
- JS面向对象写法
- 示例说明
1. 面向对象基本概念
在面向对象编程中,我们考虑的对象是真实存在的,或者说虚拟存在的,但是与我们实际的业务有直接关系的实体。比如我们在开发一个购物网站,我们可能会把商品,订单,用户,购物车这些实体看成对象。
在面向对象编程中,我们的关注点是对象之间的关系和交互,而不是对象本身所做的工作。我们使用封装,继承和多态来实现这些关系。
封装:是指将对象的状态和行为保存在对象内,通过有限的接口来访问它们。
继承:方法通过从一个类到另一个类的现有代码的继承,使代码重用并在代码之间产生关系。
多态:指同一实体具有多个形式。在OOP中,多态意味着某个类可以使用与另一类相同的方法。
2. JS面向对象写法
在JavaScript中,我们使用构造函数来创建对象。一个构造函数实际上代表了一个特定类型的对象,使用new关键字实例化一个类会生成一个对象。我们常常使用JavaScript来处理动态对象,方法在运行时可以在不同类型的对象中重用,这种灵活性是几乎所有编程语言中都无法匹敌的。
我们使用函数来定义一个类,通过调用函数并构造实例来生成新对象。这个函数叫做构造函数,我们约定以大写字母开头。构造函数中有实例属性和实例方法,实例属性由字符串或引用类型的值组成,而实例方法由function语句定义的函数构成,它们都是和instances这个实例有关的,并且仅能在instances上调用。
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
this.speak = function() {
console.log('My name is ' + this.name + ', ' + 'I am ' + this.age + ' years old, ' + 'I am a ' + this.gender);
}
}
在这个例子中,我们定义了一个表示人的类。这个类有三个实例属性(name, age, gender),一个实例方法(speak)。这个speak()方法作为实例方法,仅能在instances实例上调用,而不能在类之间共享。
创建instances实例的方法是通过new关键字来调用构造函数:
var person1 = new Person('Lily', 18, 'female');
var person2 = new Person('Mike', 20, 'male');
person1.speak(); // My name is Lily, I am 18 years old, I am a female
person2.speak(); // My name is Mike, I am 20 years old, I am a male
在这里我们实例化了两个人的对象实例,分别创建了一个女生Lily和一个男生Mike,然后调用speak()方法来实现输出。
3. 示例说明
接下来,我们具体使用一个小例子来说明。我们创建一个动物类,有三个实例方法,分别是eat(), move(), sleep()过程,然后扩展出两个子类--狗和鸟。
首先,我们可以定义一个动物类Animal,通过加上属性name和type,然后添加eat(), move(), sleep()方法来初始化。
function Animal(name, type) {
this.name = name;
this.type = type;
}
Animal.prototype.eat = function() {
return `I am a ${this.type}, I like eating.`;
}
Animal.prototype.move = function() {
return `I am a ${this.type}, I can run and swim and fly.`;
}
Animal.prototype.sleep = function() {
return `I am a ${this.type}, I am sleeping.`;
}
接着,我们为狗和鸟分别定义Dog()和Bird()构造函数,他们都继承Animal()构造函数。Dog()具有additional方法bark()并且Bird()具有additional方法fly()。
function Dog(name) {
Animal.call(this, name, 'dog');
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.bark = function() {
return `I am a ${this.type}, I am barking.`;
}
function Bird(name) {
Animal.call(this, name, 'bird');
}
Bird.prototype = Object.create(Animal.prototype);
Bird.prototype.constructor = Bird;
Bird.prototype.fly = function() {
return `I am a ${this.type}, I am flying.`;
}
最后我们创建实例对象实现运行:
var lucy = new Dog('lucy');
var tweety = new Bird('tweety');
console.log(lucy.eat()); // I am a dog, I like eating.
console.log(tweety.fly()); // I am a bird, I am flying.
console.log(lucy.bark()); // I am a dog, I am barking.
console.log(tweety.sleep()); // I am a bird, I am sleeping.
在这里,我们创建了一只名叫Lucy的狗和一只名叫Tweety的鸟。然后,我们调用实例方法eat(),fly(),bark()和sleep()来输出这两个实例化对象的行为。
这就是一个比较完整的JS创建对象和类的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js面向对象的写法 - Python技术站