深入了解Javascript如何实现继承
最近,我看到一个人在网上最近采访了淘宝。然后他发现他有许多不清楚的东西。所以我想写一些文章来加深我对一些问题的理解。本文中提到的一个问题是:Javascript如何实现继承
我将解释在互联网上发现的一些方法和例子,以加深我的印象。
我们知道Javascript中的函数是万能的,而且除了用于定义的函数定义外,还可以用于类的定义。
Javascript的继承也有点奇怪。不像C++和面向对象的语言,他没有如公共和私人访问控制修饰符。没有实现或其他特定符号来说明继承。
对于Javascript类的继承,您可以参考下面的示例。
复制代码代码如下所示:
功能人(){
属性
这个。性别=女性;
这个年龄= 18岁;
这个词=沉默;
方法
this.shouting =函数(){
警惕(高兴)!父类方法;
}
}
继承
函数程序员(){
this.base =人;
}
programmer.prototype =新的人;
将子类添加方法
programmer.prototype.typecode =函数(){
警报(我正在敲代码!IT移民工人,非常不高兴;
}
调用示例
函数sayHello(){
var =新程序员();
警报(a.gender); / /调用父类
(a.shouting); / /方法调用父类
(a.typecode); / /调用子类
}
SayHello();
在这个例子中,第一个语句是一个类,它包含了许多属性和方法,然后声明一个类的程序员,其中有一个基本属性,这个属性不是必需的,但不规范,找到后继承类的对象需要写,然后到原型对象的程序员(原型)复制的人;那类继承。
javascript仿真中的类和继承原则
在面向对象语言中,我们使用类来创建一个定制对象,但是Javascript中所有的东西都是对象,您用什么方法创建定制对象
这就需要引入另一个概念原型(原型),我们可以简单地把原型作为模板,定制新创建的对象是模板(原型)的副本(实际上不是副本而是链接,但是这个链接是不可见的,给人的感觉就像一个副本)。
让我们来看一个通过原型创建自定义对象的示例:
复制代码代码如下所示:
构造函数
功能人(姓名,性别){
this.name =名称;
this.sex =性;
}
定义个人原型,原型属性可以是自定义对象引用。
person.prototype = { {
getName:函数(){
返回this.name;
},
GetSex:函数(){
返回this.sex;
}
}
在这里,我们把函数人称为构造函数,即创建自定义对象的函数,正如您所见,Javascript通过构造函数和原型来模拟类的功能。
下面是一个如何创建自定义对象的示例,Javascript所做的具体工作:
复制代码代码如下所示:
Var Zhang =新的人(zhangsan
Console.log((张。getName)); / / 的权限
var =新人(淳化)
Console.log((春。getName)); / /淳化
当代码var张=新的人(zhangsan
创建一个空白对象(新对象())。
复制属性person.prototype(键值对)这个空对象(我们前面提到的,内部的实现不是副本,而是一个隐藏链接)。
该对象通过关键字进入构造函数并执行构造函数。
将这个对象赋给变量张。
所有的工作都做完了。
为了证明原型模板没有复制到实例化对象,而是链接的方法,请参见下面的代码:
复制代码代码如下所示:
功能人(姓名,性别){
this.name =名称;
this.sex =性;
}
person.prototype.age = 20;
Var Zhang =新的人(zhangsan
console.log(张。年龄); / / 20
在原型中覆盖年龄属性
zhang.age = 19;
console.log(张。年龄); / / 19
删除zhang.age;
在实例属性中,这个属性值也从原型中获得。
console.log(张。年龄); / / 20
在上面的例子中,如果他只是复制它,然后删除这个属性中的年龄,对象将不存在,但是一个年龄属性的例子可以输出,或者覆盖前面的值,我们只删除子类中的属性名,并用对象中仍然存在的一种不可见的链接使父类属性变老。
如何在Javascript中实现简单继承
下面的示例将创建一个雇员类雇员,它从原型继承所有来自原型原型的属性。
复制代码代码如下所示:
职能员工(姓名、性别、EmployeeID){
this.name =名称;
this.sex =性;
this.employeeid = EmployeeID;
}
员工原型对人的一个例子
因为该方法实例可以调用人原型,因此员工实例可以调用原型中的所有属性。
employee.prototype =新的人();
employee.prototype.getemployeeid =函数(){
返回this.employeeid;
};
Var Zhang =新员工(zhangsan
Console.log((张。getName)); / / zhangsan
这是Javascript可以继承的一些特定过程,以及实现继承的方法。
当然,我们的结论是Javascript的继承机制在模拟和面向对象的语言中是粗糙的,但仍然存在一些缺点。总的来说,它仍然没有降低前端开发人员在这个领域的热情。