javascript 封装 构造函数继承 非构造函数继承
把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象
1.1 简单封装:var cat1 = {}; // 创建一个空对象
cat1.name = "大毛"; // 按照原型对象的属性赋值
cat1.color = "黄色";
1.2 构造函数Prototype模式
Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。
这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。
function Cat(name,color){
this.name = name;
this.color = color;
}
Cat.prototype.type = "猫科动物";
Cat.prototype.eat = function(){alert("吃老鼠")};
生成实例 var cat1 = new Cat("大毛","黄色");
2.1 利用空对象继承:
function extend(Child, Parent) {
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.uber = Parent.prototype;
}
2.1 拷贝继承
function extend2(Child, Parent) {
var p = Parent.prototype;
var c = Child.prototype;
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
}
3.1 object()方法
function object(Father) {
function F() {}
F.prototype = Father;
return new F();
}
使用: var Doctor = object(Chinese);//中国医生的例子
然后加上对象本生 Doctor.career = '医生';
3.2浅拷贝
function extendCopy(p) {
var c = {};
    for (var i in p) { 
      c[i] = p[i];
    }
c.uber = p;
    return c;
  }
使用: var Doctor = extendCopy(Chinese);
3.3 深拷贝
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
      }
    }
    return c;
  }
使用:var Doctor = deepCopy(Chinese);
javascript 封装 构造函数继承 非构造函数继承的更多相关文章
- (三)Javascript面向对象编程:非构造函数的继承
		
Javascript面向对象编程:非构造函数的继承 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使 ...
 - 转载:javascript面向对象编程:非构造函数的继承
		
一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese = { nation:'中国' }; 还有一个对象,叫做&qu ...
 - Javascript面向对象编程:非构造函数的继承
		
今天是最后一个部分,介绍不使用构造函数实现"继承". 一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Ch ...
 - JS继承,原型继承,构造函数的继承,非构造函数"的继承
		
a.原型继承 一.new运算符的缺点 用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法.比如,在DOG对象的构造函数中,设置一个实例对象的共有属性species. function DOG ...
 - Javascript面向对象编程(三):非构造函数的继承(对象的深拷贝与浅拷贝)
		
Javascript面向对象编程(三):非构造函数的继承 作者: 阮一峰 日期: 2010年5月24日 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现&quo ...
 - javascript面向对象(三):非构造函数的继承
		
本文来自阮一峰 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使用构造函数实现"继承" ...
 - javascript之非构造函数的继承
		
这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使用构造函数实现"继承". 一.什么是 ...
 - Javascript面向对象(三):非构造函数的继承
		
这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使用构造函数实现"继承". 一.什么是 ...
 - JavaScript 面向对象编程(三):非构造函数对象的继承
		
JavaScript 面向对象编程(三):非构造函数对象的继承 一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese ...
 
随机推荐
- Android ActivityManagerService 基本构架详解
			
学习AmS有段时日了,总结下,也好梳理一下自己的思路.小兵一个,有些地方理解不对,大家可以互相讨论,交流才有进步吗~~~ AmS可以说是Android上层系统最核心的模块之一,其主要完成管理应用进程的 ...
 - 【HDOJ】2721 Persistent Bits
			
题目有点长,但是题意说的很清楚.位操作. #include <stdio.h> ]; int main() { int a, b, c, s; int i, j, k, n, tmp, m ...
 - POJ_3111_K_Best_(二分,最大化平均值)
			
描述 http://poj.org/problem?id=3111 n个珠宝,第i个有价值v[i]和重量w[i],要从总选k个,使得这k个的(价值之和)/(重量之和)即平均价值最大,输出选中的珠宝编号 ...
 - JAVA用geotools读写shape格式文件
			
转自:http://toplchx.iteye.com/blog/1335007 JAVA用geotools读写shape格式文件 (对应geotools版本:2.7.2) (后面添加对应geotoo ...
 - 切换Oracle数据库实例
			
如果多个实例,需要切换可以采用以下命令: export ORACLE_SID=SID
 - WP8模拟器需要BIOS开启虚拟化支持(转载)
			
在BIOS里启用hypervisor和virtualization,然后安装WP8 SDK. 如果出现“当前用户未添加到Hyper-V管理组时”, 以管理员身份运行CMD: net localgrou ...
 - 5 approach to load UIView from Xib
			
After the past few years I found that the only manageable way for creating/maintaining view (or any ...
 - Shell if else语句
			
if 语句通过关系运算符判断表达式的真假来决定执行哪个分支.Shell 有三种 if ... else 语句: if ... fi 语句: if ... else ... fi 语句: if ... ...
 - SQL SERVER 查询死锁
			
USE mastergo CREATE PROCEDURE [dbo].[sp_who_lock]AS BEGIN DECLARE @spid INT , ...
 - Hive sql 语法解读
			
一. 创建表 在官方的wiki里,example是这种: Sql代码 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name d ...