java描述语言继承的实现方式,javascript继承爪哇岛有哪两种形式?

的继承在很多书里面细致的分了很多种类型和实现方式,大体上就是两种对象冒充、原型方式。这两种方式各有优点和缺陷,这里我给你先列举出来,再从底层分析区别。我们看到了,在Js版本更新的过程中,为了更方便的执行这种上下文this的切换以达到继承或者更加广义的目的,增加了call和apply函数。所以说尽管call和apply并不是仅仅为了继承而新增的方法,但用它们可以模拟继承。

  • 网站首页
  • 服务范围
  • 新闻动态
  • 关于我们
  • 联系我们
  • java描述语言继承的实现方式,javascript继承爪哇岛有哪两种形式?

    2022-04-21

    javascript继承有哪两种形式
    在很多书里,继承分为很多类型和实现方法,一般是两种:对象模拟和原型方法。这两种方法各有利弊。这里我先给大家列举一下,然后从底层分析一下区别:(1)对象冒充A(name){ this . name = name;这个。=(){alert(this.name+"sayHello!");};}B(name,id){ this . temp = A;this.temp(名称);//相当于newA();this.temp//防止超类A的属性和方法将来被temp引用覆盖this.id = id这个。=(ID){ alert(this . ID = = ID)};}构造对象B时,调用temp相当于启动A的构造函数,注意这里上下文中的这个对象是B的实例,所以在执行A的构造函数脚本时,A的所有变量和方法都会赋给这个所指向的对象,也就是B的实例,从而达到B继承A的属性方法的目的,删除临时引用temp后, 是为了防止维护B中A的类对象(注意不是实例对象)的引用改变,因为改变temp会直接导致A类的结构改变(注意不是A类的对象)。 我们可以看到,在Js版本更新的过程中,加入了call和apply函数,是为了更方便的切换这个上下文,达到继承或者更通用的目的。它们的原理是一样的,只是参数的版本不同(一个变量是任意参数,而一个参数集必须传入数组)。这里以call为例说明call实现的对象假装被继承。Rect(width,){ this.width = width这个。=;this.area=(){this.width*this。;};}(width,,name){Rect.call(this,width,);this.name = namethis . show =(){ alert(this . name+" with area:"+this . area());}}关于调用方法,官方解释:调用一个对象的方法,用另一个对象替换当前对象。Call(,arg1,arg2…)这也是对象模拟的继承。实际上,调用call方法时发生的也是上下文环境变量this的替换。在函数体中,这必须指向类对象的实例。但是,使用它作为上下文环境变量会调用Rect方法,即Rect类的构造函数。所以当Rect被调用时,它的赋值属性和方法实际上是在一个新的对象上执行的。所以虽然call和apply并不是仅仅针对继承的新方法,但是它们可以模拟继承。对象模仿继承就是这样的东西,它可以实现多重继承,只需要重复赋值的过程。然而目前并没有大规模使用。为什么?因为它有一个明显的性能缺陷,所以有必要说一下OO的概念。我们说对象是成员+成员方法的集合。构造对象实例时,这些实例只需要有自己的成员变量。成员方法只是一个对变量进行操作的可执行文本区域。不需要为每个实例复制这个区域,所有实例都可以共享。现在回到Js对模拟对象的继承,所有的成员方法都是为此而创建的,也就是所有的实例都会有一个成员方法的副本,这是对内存资源的极度浪费。其他的缺陷,比如对象冒充变量,方法不能继承域,就不用提了。我觉得前一个致命缺陷就够了。但是我们还是要了解一下,尤其是父类的属性和方法是如何继承的原理,这对理解Js继承非常重要。㈡原型。第二种类型的继承是原型。所谓原型继承,就是以某种方式使用或覆盖,从而达到复制属性方法的目的。实现的方式有很多种,不同的框架可能会有一些差异,但是如果把握住了原理,就没有什么不懂的了。看一个例子(某种实现):(){ { this.name = " Mike这个。=(){alert("!");};}..=(){alert("你好!");};(){}.= new();关键是把prototype属性赋给最后一句中类构造的对象。在这里,作者解释了如何将父类的属性和方法复制到子类中。Js读取一个对象的属性时,总是先看自己域的属性列表,如果有就返回;否则,它将读取域(每个对象共享构造该对象的类的域的所有属性和方法),如果找到,它将返回。因为它可以指向其他对象,Js解释器将递归地寻找域所指向的域

    客服微信
    Phone: 18560018089
    Emali: tx1860@qq.com
    Address: 山东省济南市高新区中舜泰广场9号楼南楼1009