Javascript如何实现继承?
前言
我这篇文章会误人子弟,我把继承跟构造函数实例化搞混了,汗!要想搞清楚JS的继承机制,看下大牛写的文章:http://www.cnblogs.com/dolphinX/p/3307903.html
很早以前向大牛要了一份坦克游戏的源代码,自己懒一直都没有去看,这几天突然心血来潮,竟然耐着性子一行一行的看代码,一个源文件一个源文件的看,我被大师优秀的设计所折服,看着过程中发现一个奇怪的问题,有几个方法所有对象都有,但是又没有看到在哪定义了,所以我决定仔细的看这个游戏用到的框架Microsoft Ajax Framework( 可能大牛是搞C#开发的:) ),看到后面发现是通过原型(prototype)继承的,自认为对JS的原型模式非常了解:),看了这个游戏的代码之后,发现自己理解的还不够深,最起码JS所有对象之间的关系没有搞清楚>_<。啥是原型模式?怎么实现的呢?JS所有对象间到底是啥关系呢?
JS的设计理念
1 一切皆对象!
2 对象间通过原型来实现继承!
原型是啥?
它是函数对象的属性,所有函数对象都有原型(prototype)属性,prototype是一个对象,通过构造函数创建对象时,新的对象会继承构造函数对象的原型(prototype)。
JS如何实现继承呢?
通过原型模式实现继承,即构造函数的prototype属性
JS对象间的关系
所有函数对象都会继承Function对象,Function对象是所有函数对象的祖先
所有构造函数的原型通过Object构造函数创建,然后再填充其它方法与属性,Object对象是非函数对象的祖先
我的疑问
思索了一下JS对象间的关系之后,我产生了一个问题:Function对象是不是所有对象的祖先啊?
后记
1 JS对象继承方式很诡异,不跟其他面向对象的语言一样
2 JS对象间的关系理解的更深了,是我阅读大牛源码的一个收获,以后多多看开源项目的代码
Javascript如何实现继承?的更多相关文章
- javascript 之 prototype继承机制
理解Javascript语言的继承机制 javascript没有"子类"和"父类"的概念,也没有"类"(class)和"实例&qu ...
- JavaScript寄生组合式继承分析
JavaScript寄生组合式继承特点: 避免了在子类prototype上创建不必要多余的属性,相比直接继承基类的实例效率要高. 是JavaScript 实现继承的最有效方式. <script& ...
- 深入理解:JavaScript原型与继承
深入理解:JavaScript原型与继承 看过不少书籍,不少文章,对于原型与继承的说明基本上让人不明觉厉,特别是对于习惯了面向对象编程的人来说更难理解,这里我就给大家说说我的理解. 首先JavaScr ...
- JavaScript学习13 JavaScript中的继承
JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...
- 浅谈JavaScript中的继承
引言 在JavaScript中,实现继承的主要方式是通过原型链技术.这一篇文章我们就通过介绍JavaScript中实现继承的几种方式来慢慢领会JavaScript中继承实现的点点滴滴. 原型链介绍 原 ...
- JavaScript 类式继承与原型继承
交叉着写Java和Javascript都有2年多了,今天来总结下自己所了解的Javascript类与继承. Javascript本身没有类似Java的面向对象的类与继承术语,但其基于原型对象的思想却可 ...
- JavaScript中的继承(原型链)
一.原型链 ECMAScript中将原型链作为实现继承的主要方法,基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 实例1: function SupType() { this.pro ...
- 【JavaScript回顾】继承
组合继承 组合继承(combination inheritance),有时候也叫做伪经典继承,指的是将原型链和借用构造函数的 技术组合到一块,从而发挥二者之长的一种继承模式.其背后的思路是使用原型链实 ...
- #JavaScript对象与继承
JavaScript对象与继承 JavaScript是我在C语言之后接触的第二门编程语言,大一暑假的时候在图书馆找了一本中国人写的JavaScript程序设计来看.那个时候在编程方面几乎还是小白,再加 ...
- javascript中的继承方法
从Javascript面向对象编程(二):构造函数的继承这里,可以看到详细的说明. 我只是将其中的例子做成html文件,便于调试罢了. 1. 构造函数绑定 <html> <head& ...
随机推荐
- cropbox
今天给大家分享一款基于jQuery头像裁剪插件cropbox,这是一款简单实用的jQuery头像在线裁剪插件.该插件适用于适用浏览器:IE8.360.FireFox.Chrome.Safari.Ope ...
- [Swift通天遁地]五、高级扩展-(5)获取互补色、渐变色、以及图片主题颜色
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 关于swoole 和golang 的压力测试结果
一.环境介绍 linux centos7 php7.1.18 go1.12.1 2核4G内存 二.代码 swoole代码 <?php $http = new swoole_http_server ...
- SpringBoot 热部署 + IDEA
1.使用Spring-Boot-Devtools实现热加载(这种方式会自动重启) devtools的原理: 深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类( ...
- C/C++常用头文件 以及简单应用介绍
C/C++头文件一览 C #include <assert.h> //设定插入点#include <ctype.h> //字符处理#include <errno.h> ...
- ASP.NET MVC5 之数据迁移
SQL 中新建数据库 DataSystem 1.web.config 数据库连接字符串: <add name="APPDataConnection" connectionSt ...
- ACM_哥德巴赫猜想(素数筛)
哥德巴赫猜想 Time Limit: 2000/1000ms (Java/Others) Problem Description: 哥德巴赫猜想大概是这么一回事:“偶数(>=4) == 两个质数 ...
- 337 House Robber III 打家劫舍 III
小偷又发现一个新的可行窃的地点. 这个地区只有一个入口,称为“根”. 除了根部之外,每栋房子有且只有一个父房子. 一番侦察之后,聪明的小偷意识到“这个地方的所有房屋形成了一棵二叉树”. 如果两个直接相 ...
- scala控制流程语句
直接上代码了哈. package com.test.scala.test object Kongzi { def main(args: Array[String]): Unit = { //if 语句 ...
- [转]Android杂谈--ListView之BaseAdapter的使用
本文转自:http://blog.csdn.net/tianshuguang/article/details/7344315 话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapte ...