最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

对JS的继承的理解

来源:动视网 责编:小采 时间:2020-11-27 19:36:45
文档

对JS的继承的理解

对JS的继承的理解:js的原型继承原型链是实现js继承的主要方法,他的原理是让利用原型让一个引用类型继承另一个引用类型的属性和方法。如果我们让一个原型对象等于一个实例,那么,此时的原型对象将包含指向另一个原型的指针假如另一个原型又等于一个对象的实例,如此一层套一层
推荐度:
导读对JS的继承的理解:js的原型继承原型链是实现js继承的主要方法,他的原理是让利用原型让一个引用类型继承另一个引用类型的属性和方法。如果我们让一个原型对象等于一个实例,那么,此时的原型对象将包含指向另一个原型的指针假如另一个原型又等于一个对象的实例,如此一层套一层


js的原型继承

原型链是实现js继承的主要方法,他的原理是让利用原型让一个引用类型继承另一个引用类型的属性和方法。如果我们让一个原型对象等于一个实例,那么,此时的原型对象将包含指向另一个原型的指针假如另一个原型又等于一个对象的实例,如此一层套一层,这就是原型链的基本概念。

下边是一个简单的例子

 var Parent = function(){
 this.name = 'parent' ;
 } ;
 Parent.prototype.getName = function(){
 return this.name ;
 } ;
 Parent.prototype.obj = {a : 1} ; var Child = function(){
 this.name = 'child' ;
 } ;
 Child.prototype = new Parent() ; var parent = new Parent() ; var child = new Child() ;
 console.log(parent.getName()) ; //parent
 console.log(child.getName()) ; //child

以上代码定义了两个类型:parent和chiled。每个类型都有一个属性和方法,他们主要的区别就是child继承了parent,继承是通过创建parent的实例,并把这个实例赋给child.prototype实现的
实现的本质是重写了原型链对象,取代他的是新的实例。直接把父类的对象赋值给子类构造函数的原型,这样子类的对象就可以访问到父类以及父类构造函数的prototype中的属性。
我们可以用instanceof操作符判断,用这个操作符测试实例和原型链中出现过的构造函数,就返回true


借用构造函数

什么是构造函数

JavaScript的构造函数并不是作为类的一个特定方法存在的;当任意一个普通函数用于创建一类对象时,它就被称作构造函数,或构造器。一个函数要作为一个真正意义上的构造函数,需要满足下列条件:

1、 在函数内部对新对象(this)的属性进行设置,通常是添加属性和方法。

2、 构造函数可以包含返回语句(不推荐),但返回值必须是this,或者其它非对象类型的值。
关于JavaScript的构造函数,有一个容易混淆的地方,那就是原型的constructor属性。在JavaScript中,每一个函数都有默认的原型对象属性prototype,该对象默认包含了两个成员属性:constructor和proto。关于原型的细节就不在本文赘述了,我们现在关心的是这个constructor属性。

按照面向对象的习惯性思维,我们说构造函数相当于“类”的定义,从而可能会认为constructor属性就是该类实际意义上的构造函数,在new表达式创建一个对象的时候,会直接调用constructor来初始化对象,那就大错特错了。new表达式执行的实际过程已经在上文中介绍过了(四个步骤),其中用于初始化对象的是第三步,调用的初始化函数正是“类函数”本身,而不是constructor

 function CO(){
 this.p = “I’m in constructed object”; this.alertP = function(){
 alert(this.p);
 }
 } var o2 = new CO();

借用构造函数继承

这个基本思想很简单,也就是在子类型构造函数的内部调用超类型构造函数。因为函数只不过是在特定环境中执行代码的对象,因此可以通过使用apply()和call()方法也可以在新创建的对象上执行的构造函数。

 function superType(){
 this.colors = ["red","blue","green"];
 } function subtype(){
 superType.call(this);
 } var instance1 = new subtype();
 instance1.colors.push("black");
 alert(instance1.colors);//"red,blue,green,black"
 var instance2 = new subtype();
 alert(instance2.colors);//"red,blue,green"

通过使用call(),我们实际上是在新创建的subtype实例环境下调用了supertype()构造函数,这样一来,就会在新subtype对象上执行supertype构造函数,因此就会在subtype对象上执行supertype()函数中定义的所有对象初始化代码

 function superType(name){
 this.name = name;
 } function subtype(){
 superType.call(this,"Marry"); this.age = 29;
 } var instance = new subtype();
 alert(instance.name);//"Marry"
 alert(instance2.age);//"29"

这是构造函数的一个很大的优势,可以在子类型构造函数中向超类型构造函数传递参数。

本文讲解了JS的继承的理解,更多相关内容请关注Gxl网。

相关推荐:

JS解密,在线JS解密解密

如何优化JS代码

JavaScript之本地对象

文档

对JS的继承的理解

对JS的继承的理解:js的原型继承原型链是实现js继承的主要方法,他的原理是让利用原型让一个引用类型继承另一个引用类型的属性和方法。如果我们让一个原型对象等于一个实例,那么,此时的原型对象将包含指向另一个原型的指针假如另一个原型又等于一个对象的实例,如此一层套一层
推荐度:
标签: js 了解 理解
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top