js构造函数的完美继承(欢迎吐槽)
function Animal(){ //定义父类
this.leibie="动物";
}
Animal.prototype.test1=[1,2]; function Cat(name,color){ //定义子类
Animal.call(this); //继承父类的this变量属性
// Animal.apply(this,arguments); //如果需要子类参数,也可用这条替代上条语句
this.name=name;
this.color=color;
} function extend(Child,Parent){ //继承父类的prototype属性
var c = Child.prototype;
var p = Parent.prototype;
for (var i in p){
if(p.hasOwnProperty(i)){
if(typeof p[i]==="object"){
c[i] = (p[i].constructor === Array)?[]:{};
deepCopy(c[i],p[i]); //深拷贝,拷贝复合类型(Array,Object),而并不是简单的把俩个指针指向同一内存地址。 浅拷贝,拷贝基本类型。
}
else{
c[i] = p[i];
}
}
}
} function deepCopy(childObject,parentObject){
for (var i in parentObject){
if(parentObject.hasOwnProperty(i)){
if(typeof parentObject[i]==="object"){
childObject[i] = (parentObject[i].constructor === Array)?[]:{};
deepCopy(childObject[i],parentObject[i]);
}
else{
childObject[i] = parentObject[i];
}
}
}
} extend(Cat,Animal); //继承父类的prototype属性 /*继承的时候可以看需求,如果只需继承prototype的属性,那么不需要Animal.call(this),如果只需要继承本地属性,那么不需要extend,来提高效率。如果都要,则都加上。*/ var cat1 = new Cat("Linda","pink");
var animal1 = new Animal(); cc.log(cat1.test1[0]); //
cc.log(animal1.test1[0]); //
cat1.test1[0]=2;
cc.log(cat1.test1[0]); //
cc.log(animal1.test1[0]); //
animal1.test1[0]=3;
cc.log(cat1.test1[0]); //
cc.log(animal1.test1[0]); //
js构造函数的完美继承(欢迎吐槽)的更多相关文章
- 深入理解JS原型链与继承
我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...
- JS原型链与继承别再被问倒了
原文:详解JS原型链与继承 摘自JavaScript高级程序设计: 继承是OO语言中的一个最为人津津乐道的概念.许多OO语言都支持两种继承方式: 接口继承 和 实现继承 .接口继承只继承方法签名,而实 ...
- js的6种继承方式
重新理解js的6种继承方式 注:本文引用于http://www.cnblogs.com/ayqy/p/4471638.html 重点看第三点 组合继承(最常用) 写在前面 一直不喜欢JS的OOP,在学 ...
- JS中原型链继承
当我们通过构造函数A来实现一项功能的时候,而构造函数B中需要用到构造函数A中的属性或者方法,如果我们对B中的属性或者方法进行重写就会出现冗杂的代码,同时写出来也很是麻烦.而在js中每个函数都有个原型, ...
- js原型链与继承(初体验)
js原型链与继承是js中的重点,所以我们通过以下三个例子来进行详细的讲解. 首先定义一个对象obj,该对象的原型为obj._proto_,我们可以用ES5中的getPrototypeOf这一方法来查询 ...
- Class和普通js构造函数的区别
Class 在语法上更加贴合面向对象的写法 Class 实现继承更加易读.易理解 更易于写 java 等后端语言的使用 本质还是语法糖,使用 prototype Class语法 typeof Math ...
- 探讨 JS 的面向对象中继承的那些事
最近学了 JS 的面向对象,这篇文章主要是探讨 JS 的面向对象中继承的那些事. JS中继承的特点: 1.子类继承父类: 2.子类可以用父类的方法和属性 3.子类的改变可以不影响父类 下面用一个例子来 ...
- 细说 js 的7种继承方式
在这之前,先搞清楚下面这个问题: function Father(){} Father.prototype.name = 'father'; Father.prototype.children = [ ...
- JS构造函数的用法和JS原型
$(function(){ var rec = new Rectangle(5, 10); //alert(rec.width + "*" + rec.height + " ...
随机推荐
- HDFS中PathFilter类
HDFS中PathFilter类 在单个操作中处理一批文件,这是很常见的需求.比如说处理日志的MapReduce作业可能需要分析一个月内包含在大量目录中的日志文件.在一个表达式中使用通配符在匹配多个文 ...
- 使用 javascript 来实现 观察者模式
以[猫叫.老鼠跑.主人醒]为例子,使用 javascript 来实现 观察者模式 (有在线演示) 2013-06-24 08:35 by 金色海洋(jyk)阳光男孩, 572 阅读, 4 评论, 收藏 ...
- POJ 3342 - Party at Hali-Bula 树型DP+最优解唯一性判断
好久没写树型dp了...以前都是先找到叶子节点.用队列维护来做的...这次学着vector动态数组+DFS回朔的方法..感觉思路更加的清晰... 关于题目的第一问...能邀请到的最多人数..so ea ...
- svn的使用详细说明
转载请指明:杨凯专属频道 1.在电脑的任意位置创建一个版本库文件夹 最好是全英文的目录 例如 在c:\svn下面创建一个 2.打开此文件,在这里右键 找--TortoiseSVN--->Crea ...
- Android call setting 源码分析
看下篇之前,请先读这三篇文章: Android GSM驱动模块(rild)详细分析(一)基本架构及初始化 Android GSM驱动模块(rild)详细分析(二)request流程 Android G ...
- mysql之多列索引
mysql的多列索引是经常会遇到的问题,怎样才能有效命中索引,是本文要探讨的重点. 多列索引使用的Btree,也就是平衡二叉树.简单来说就是排好序的快速索引方式.它的原则就是要遵循左前缀索引. 多个索 ...
- 持续集成CI与自动化测试
-------------------------------------------------------------------------------------------------- ...
- sublime text3 3103 激活码
—– BEGIN LICENSE —–Michael BarnesSingle User LicenseEA7E-8213858A353C41 872A0D5C DF9B2950 AFF6F667C4 ...
- linux面试题集锦3《转》
三.简答题: 1.简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程. 参考答案: Linux通过i节点表将文件的逻辑结构和物理结构进行转换. i节点是一个64字节长的表,表中包 ...
- DotNetZip 压缩下载
var fs = Response.OutputStream; using (ZipFile zip = new ZipFile(System.Text.Encoding.UTF8)) //编码是解决 ...