代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
构造函数式继承
作者:
欢乐小金鱼
/ 发布于
2015/3/5
/
508
/*构造函数式继承*/ function Chinese() { this.nation = "中国"; this.character = "黄种人" } Chinese.prototype.places = function() { return "北京" } Chinese.prototype.language = function() { return "中文" } /***构造函数绑定式继承***/ function Zhanger() { Chinese.apply(this, arguments); } var a = new Zhanger(); //console.log(a.character); // 黄种人 //console.log(a.places()); // Uncaught TypeError: Object #<Zhanger> has no method 'places' 由此可以看出,单纯的用apply来继承,构造函数原型中的方法是继承不了的; /***构造函数实例式继承***/ function Lisan() {} Lisan.prototype = new Chinese(); var b = new Lisan(); console.log(b.places()) // 北京 console.log(b.constructor == Chinese); // true; 之所以为true是因为---Lisan.prototype = new Chinese();它相当于完全删除了Lisan的prototype对象原先的值,然后赋予一个新值,这个值就是Chinese的prototype,那么Chinese.prototype.constructor == Chinese咯;改变的方法如下 Lisan.prototype.constructor = Lisan; console.log(b.constructor == Lisan); // true; //那么改下Lisan的原型增加一个方法,看看Chinese的原型是否改变 Lisan.prototype.home = function(){ return "上海"; } var c1 = new Chinese(); //console.log(c1.home()); // Uncaught TypeError: Object #<Chinese> has no method 'home' 由此可见 Chinese的原型没有被篡改; ///弊端:Lisan.prototype = new Chinese(); 建立Chinese的实例了,比较占用内存; /***直接prototype式继承***/ function Wangwu() {} Wangwu.prototype = Chinese.prototype; var c = new Wangwu(); console.log(c.places()); // 北京 console.log(c.constructor == Chinese); // true; 如上同样的道理 Wangwu.prototype.constructor = Wangwu; console.log(c.constructor == Wangwu); // true; //那么改下Wangwu的原型增加一个方法,看看Chinese的原型是否改变 Wangwu.prototype.home = function(){ return "上海"; } var c2 = new Chinese(); console.log(c2.home()); // 上海 由此可见Chinese的原型被篡改了!!!!! 原因是:Wangwu.prototype和Chinese.prototype指向的都是同一个对象,那么对Wangwu.prototype的修改就会反应到Chinese.prototype上!怎么才能避免这种情况呢?就有了下面这种方法! ///弊端:prototype都指向同一个对象,修改任何一个,则原型都被修改了; /***利用空对象+prototype式继承***/ function Maliu() {} function extend(Child,Parent) { function F() {}; //空对象机会不占内存 F.prototype = Parent.prototype; Child.prototype = new F(); Child.prototype.constructor = Child; } extend(Maliu,Chinese); var d = new Maliu(); console.log(d.places()) // 北京 这种模式修改Maliu的prototype对象就不会影响到Chinese的prototype对象了,空对象F几乎不占用内存;
试试其它关键字
构造函数式继承
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
欢乐小金鱼
贡献的其它代码
(
1
)
.
构造函数式继承
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3