javascript继承的原理

通过对javascript的几种函数的运行分析,得出结论:

javascript 的继承实际上是通过对对象进行初始化来模拟的。

代码一:实现继承的一种方法

<script language="javascript" type="text/livescript">
function Person()
{
  this.say=function(){alert("Name")};
}
function PersonA()
{
  this.say=function(){alert("windowSay");};
}
PersonA();//对window对象添加方法
window.say();//显示windowSay
var Me={};
Person.call(Me);
Me.say();//输出结果为Name,可以得出Me通过Person.call(Me)“继承”了say方法
</script>
对比:

<script language="javascript" type="text/livescript">
function Person()
{
  
}
Person.say=function(){alert("Name")};
var Me={};
Person.call(Me);
//Me.say();//输出object doesn't support this method or property!我们可以看到Me并没有“继承”Person的say方法
</script>

为什么呢?

原因是第一种方法执行Person.call(Me)时,将Person里的this指定为Me,然后执行Person方法里的代码

显而易见,this.say=function(){alert("Name")};这句话对Me添加了方法。让Me对象具有了say的行为。

而PersonA();时,要执行PersonA里面的代码,此时this对象代表window,所以window获得了say行为。

而第二种方法执行Person内部的代码,所以并没有给Me添加行为,调用Me.say()自然出错。

如此看来通过Call,Apply,for(property in object),prototype等方法实现继承时,只是一种模拟继承的

方式。具体过程就是对一个对象动态添加函数,属性。

Person.call(Me);是对Me添加Person的属性方法,哪么function Person(){alert("Name");}面对的对象是谁呢?

时间: 2024-10-03 08:36:59

javascript继承的原理的相关文章

javascript继承模式原理与示例深入剖析

原型链 ECMAScript 中描述了原型链的概念,并将原型链作为实现继承的主要方法. 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.简单回顾一下构造函数.原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针.那么,假如我们让原型对象等于另一个类型的实例,结果会怎么样呢?显然,此时的 原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针.假如另一个原型又是另一个

javascript继承—继承的实现原理(1)

原文:javascript继承-继承的实现原理(1) 打算针对js的继承写一系列文章,详细的分析js里继承原理,实现方式,各种继承方式的优缺点,以及最优继承方案,还有多继承的问题等-. 面向对象的编程的核心是封装.继承和多态,js可以看作是一种面向对象的语言,而面向对象的扩展性最核心的部分是多态,多态的必要条件有三个,首先就是继承,其次父类的引用指向子类,最后是方法重写.对于js来说,由于其创建对象的方式多种多样,因此,需要对父类的多种属性和方法实现很好的继承,就必须找到一个比较完善的方法.本篇

javascript原型继承工作原理和实例详解_javascript技巧

先为大家分享JS原型继承实例,供大家参考,具体内容如下 一.JS原型继承 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JS原型继承</title> </head> <body> <!--原型继承--> <script type="text/javascript"> //cl

javascript继承机制实例详解_javascript技巧

本文实例讲述了javascript继承机制.分享给大家供大家参考.具体分析如下: 初学javascript一般很难理解Javascript语言的继承机制它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承. 我花了很多时间,学习这个部分,还做了很多笔记.但是都属于强行记忆,无法从根本上理解

JavaScript继承学习笔记【新手必看】_javascript技巧

JavaScript作为一个面向对象语言(JS是基于对象的),可以实现继承是必不可少的,但是由于本身并没有类的概念,所以不会像真正的面向对象编程语言通过类实现继承,但可以通过其他方法实现继承.实现继承的方法很多,下面就只是其中的几种. 一. 原型链继承 function Person() { //被继承的函数叫做超类型(父类,基类) this.name='mumu'; this.age='18'; } Person.prototype.name='susu';//当属性名相同时需就近原则,先在实

详解Javascript继承的实现_javascript技巧

本文从以下四个方面展开话题: •1. 混合方式实现及问题 •2. 期望的调用方式 •3. 继承库的详细实现 •4. 总结 感兴趣的朋友可以继续往下阅读详情. 我最早掌握的在js中实现继承的方法是在xx学到的混合原型链和对象冒充的方法,在工作中,只要用到继承的时候,我都是用这个方法实现.它的实现简单,思路清晰:用对象冒充继承父类构造函数的属性,用原型链继承父类prototype 对象的方法,满足我遇到过的所有继承的场景.正因如此,我从没想过下次写继承的时候,我要换一种方式来写,直到今天晚上看了三生

理解JavaScript继承

对于JavaScript的继承和原型链,虽然之前自己看了书也听了session,但还是一直觉得云里雾里,不禁感叹JavaScript真是一门神奇的语言.这次经过Sponsor的一对一辅导和自己回来后反复思考,总算觉得把其中的精妙领悟一二了. 1. JavaScript创建对象 在面向对象语言中,通常通过定义类然后再进行实例化来创建多个具有相同属性和方法的对象.但是在JavaScript中并没有类的概念,不过 ECMAScript中的构造函数可以用来创建特定类型的对象.因此,在JavaScript

Javascript教程:重温Javascript继承机制

文章简介:重温Javascript继承机制. 上段时间,团队内部有过好几次几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了写口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java 和Javascript是雷锋和雷峰塔的关系.Javascript原名Mocha,当时还叫做LiveScript,创造者是Brendan Eich,现任Mozilla公司首席技术官. 1994年,历史上第一个比较成熟的网络浏览器--Navigator0.9版诞生在网景公司(Netscape),极为

Javascript继承(下) 为何要继承

Quiz1 Javascript真的需要类(Class)么? 我们首先先看下其他有类(Class)的面向对象语言(如: Java)的一些特性. 父类与子类 父类(Superclass)和子类(Subclass),并不是为了解决父亲与儿子的 问题,而是为了解决类的包含关系的,我们用Sub表示"子类",用Sup表示"父类",则有: Sub Sup 这是有区别的,例如通常我们能够将子类当成父类来使用,但认人的时候我们并不能把儿子当成父亲. 或者可以这 么说,父类和子类不是