8.3深入了解类(构造函数、this关键字、属性)
- 格式:ppt
- 大小:280.50 KB
- 文档页数:16


Javascript定义类(class)的三种⽅法(转)
在⾯向对象编程中,类(class)是对象(object)的模板,定义了同⼀组对象(⼜称"实例")共有的属性和⽅法。
Javascript语⾔不⽀持"类",但是可以⽤⼀些变通的⽅法,模拟出"类"。
⼀、构造函数法
这是经典⽅法,也是教科书必教的⽅法。它⽤构造函数模拟"类",在其内部⽤this关键字指代实例对象。
function Cat() {
= "⼤⽑";
}
⽣成实例的时候,使⽤new关键字。
var cat1 = new Cat();
alert(); // ⼤⽑
类的属性和⽅法,还可以定义在构造函数的prototype对象之上。
Cat.prototype.makeSound = function(){
alert("喵喵喵");
}
关于这种⽅法的详细介绍,请看我写的系列⽂章,这⾥就不多说了。它的主要缺点是,⽐较复杂,⽤到了this和prototype,编写和阅读都很费⼒。
⼆、Object.create()法
为了解决"构造函数法"的缺点,更⽅便地⽣成对象,Javascript的国际标准第五版(⽬前通⾏的是第三版),提出了⼀个新的⽅法。
⽤这个⽅法,"类"就是⼀个对象,不是函数。
var Cat = {
name: "⼤⽑",
makeSound: function(){ alert("喵喵喵"); }
};
然后,直接⽤Object.create()⽣成实例,不需要⽤到new。
var cat1 = Object.create(Cat);
alert(); // ⼤⽑
cat1.makeSound(); // 喵喵喵
⽬前,各⼤浏览器的最新版本(包括IE9)都部署了这个⽅法。如果遇到⽼式浏览器,可以⽤下⾯的代码⾃⾏部署。
if (!Object.create) {
Object.create = function (o) {
构造函数python
Python中的构造函数也被称为初始化函数,它是一种特殊的方法,用来初始化一个对象。在Python中,每个对象都有它自己的构造函数。该函数可以用类来调用,用来创建并初始化一个对象。下面我们来详细探讨Python中的构造函数。
1. 什么是构造函数
在Python中,构造函数是一个特殊的函数,它在对象被创建时被调用,用来初始化对象的状态。在Python中,构造函数名称通常为__init__(),它的第一个参数是self,接下来可以定义其他参数。当Python创建一个对象时,它首先会调用__new__()方法来为该对象分配内存空间,接着会调用__init__()方法来初始化该对象。
2. 构造函数的定义
在Python中,定义构造函数非常简单,只需要定义__init__()方法即可。该方法的第一个参数必须是self,self代表当前对象,它会被自动传入到方法中。接着可以定义其他参数,例如下面的例子:
```python
class Person:
def __init__(self, name, age):
= name
self.age = age
```
在上面的代码中,我们定义了一个Person类,它有两个属性name和age,我们可以通过构造函数来初始化这两个属性。
3. 构造函数的调用
当我们通过类来创建一个对象时,Python会自动调用该类的构造函数。例如:
```python
p = Person('Tom', 20)
``` 在上面的代码中,我们创建了一个Person对象p,并通过构造函数来初始化它的属性name和age。当Python执行该代码时,首先会调用__new__()方法来为该对象分配内存空间,接着会调用__init__()方法来初始化该对象。
java中的this和super的作⽤和异同和C++中调⽤⽗类的构造函数
这⼏天看到类在继承时会⽤到this和super,这⾥就做了⼀点总结,与各位共同交流,有错误请各位指正~
this
this是⾃⾝的⼀个对象,代表对象本⾝,可以理解为:指向对象本⾝的⼀个指针。
this的⽤法在java中⼤体可以分为3种:
1.普通的直接引⽤
这种就不⽤讲了,this相当于是指向当前对象本⾝。
2.形参与成员名字重名,⽤this来区分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class Person {
private int age = 10;
public Person(){ System.out.println("初始化年龄:"+age);} public int GetAge(int age){ this.age = age; return this.age; }}
public class test1 {
public static void main(String[] args) {
Person Harry = new Person(); System.out.println("Harry's age is "+Harry.GetAge(12)); }}
运⾏结果:
初始化年龄:10Harry's age is 12
可以看到,这⾥age是GetAge成员⽅法的形参,this.age是Person类的成员变量。
3.引⽤构造函数
这个和super放在⼀起讲,见下⾯。
super
super可以理解为是指向⾃⼰超(⽗)类对象的⼀个指针,⽽这个超类指的是离⾃⼰最近的⼀个⽗类。
super也有三种⽤法:
1.普通的直接引⽤
与this类似,super相当于是指向当前对象的⽗类,这样就可以⽤super.xxx来引⽤⽗类的成员。
2.⼦类中的成员变量或⽅法与⽗类中的成员变量或⽅法同名
1
2
3
4
5
6
7
8
9
10
11
12
13class Country { String name; void value() { name = "China"; }}
构造函数的八种方法
1. 默认构造函数:默认构造函数是指在没有任何参数的情况下被调用的构造函数。它的作用是初始化对象的成员变量为默认值,例如将基本数据类型初始化为0,将引用类型初始化为null。默认构造函数的定义方式是在类中声明一个不带任何参数的方法,并在方法体中定义成员变量的默认值。
2.带参数的构造函数:带参数的构造函数是指在创建对象时可以传入参数来初始化对象的成员变量。带参数的构造函数的定义方式是在类中声明一个方法,并在方法的参数列表中指定所需要的初始化参数,然后在方法体中将参数赋值给成员变量。
3.拷贝构造函数:拷贝构造函数是指通过拷贝已有对象的数据来创建一个新对象的构造函数。拷贝构造函数的定义方式是在类中声明一个方法,并在方法的参数列表中指定需要拷贝的对象的引用,然后在方法体中将拷贝对象的成员变量值赋给新对象的成员变量。
4. 私有构造函数:私有构造函数是指只能在类内部调用,外部无法通过new关键字来创建对象。私有构造函数的定义方式是将构造函数的访问修饰符设置为private,在类中的静态方法中创建对象并返回。
5.多个构造函数的重载:多个构造函数的重载是指在一个类中定义了多个具有相同名称但参数列表不同的构造函数的情况。多个构造函数的重载允许在创建对象时通过不同的参数来初始化对象的成员变量,提供了更大的灵活性。多个构造函数的重载的定义方式是在类中声明多个方法,方法名相同但参数列表不同。 6. 构造函数的继承:构造函数可以被继承,子类可以通过调用父类的构造函数来初始化子类的成员变量。当子类的构造函数被调用时,会默认调用父类的无参构造函数,如果父类没有无参构造函数,需要使用super关键字明确调用父类的有参构造函数。
7.构造函数的重写:构造函数不能被重写,因为构造函数是用来创建对象的特殊方法,每个类只有一个构造函数。然而,子类可以通过调用父类的构造函数来实现对父类成员变量的初始化。
8. 构造函数的链式调用:构造函数的链式调用是指在一个构造函数中调用另一个构造函数。使用this关键字可以在构造函数中调用同一个类中的其他构造函数,但只能在构造函数的第一行进行调用。链式调用的作用是避免代码冗余,并简化对象创建的过程。