js整理5

proto
- 每个对象具有的属性,指向构造该对象的构造函数的原型对象
 
prototype
- 函数的特有属性,指向原型对象;原型对象可以是对象,数组,函数等类型;
 
constructor
- 原型对象和实例,都有一个属性
constructor,指回原构造函数 - 修改实例的
constructor不会直接切断和原构造函数联系; - 修改实例的
__proto__.constructor(即原型对象的constructor)会切断生成实例和原构造函数联系; 
类风格的代码
//可以构建新构造器函数和原型的轻量级系统
//简单的方式来执行原型继承
//可以访问被函数原型所覆盖的方法的途径
(function () {
	var initializing = false,
	    //测试函数是否能被序列化,判断函数是否包含_super
		superPattern = /xyz/.test(function() {xyz;}) ? /\b_super\b/ : /.*/;
	Object.subClass = function (properties) {
		//上级的prototype
		var _super = this.prototype
		//初始化超类
		//原型实例化时设置为true
		initializing = true
		var proto = new this()
		initializing = false
		//将属性复制到prototype里
		for (var name in properties) {
			//考虑父类的函数
			proto[name] = typeof properties[name] == 'function' && typeof _super[name] == 'function' && superPattern.test(properties[name]) ?
			(function (name, fn) {
				//包装执行子类函数,同时可以通过_super访问父类函数
				return function () {
					var tmp = this._super
					this._super = _super[name]
					var ret = fn.apply(this, arguments)
					this._super = tmp
					return ret
				}
			})(name, properties[name])
			: properties[name]
		}
		//类构造器
		function Class() {
			if(!initializing && this.init) {
				this.init.apply(this, arguments)
			}
		}
		Class.prototype = proto;
		Class.constructor = Class;
		Class.subClass = arguments.callee;
		return Class
	}
})()
//使用
var Person = Object.subClass({
	init: function (isDancing) {
		this.dancing = isDancing
	},
	dance: function () {
		return this.dancing
	}
})
var Ninja = Person.subClass({
	init: function () {
		this._super(false);
	},
	dance: function () {
		return this._super()
	},
	swingSword: function () {
		return true
	}
})
var person = new Person(true)
var ninjia = new Ninja()
												
											js整理5的更多相关文章
- Dynamics CRM 日常使用JS整理(二)
		
BPF(Business Process Flow)相关的JS 为Stage添加changed或者selected事件: function fnOnLoad() { Xrm.Page.data.pro ...
 - Dynamics CRM 日常使用JS整理(一)
		
整理下平时CRM开发中用到的一些基本的js操作 取值: var oResult = Xrm.Page.getAttribute(sFieldName).getValue(); var oResult ...
 - js整理
		
Js脚本语音 网页里面使用的脚本语音 基础语法 注释语法 单行注释// 多行注释/**/ 嵌入js代码 尽量靠下写 用<script type="text/javascript& ...
 - Vue.js 整理笔记
		
以前我们用Jquery进行dom的操作,虽然熟悉后开发效率很高,但是如果多个控件的相互操作多的情况下,还是会乱.相比之下,Vue的使用更加清晰,通过虚拟dom将数据绑定,而且组件化和路由的帮助下,让整 ...
 - js整理3
		
函数 call: fun.call(a), a会转化成相应的对象,函数内的this即指向它; function foo() { console.log(this); } foo.call(null); ...
 - js整理1
		
数组 比较时的隐式转化 var a = [1,2,3]; var b = [1,2,3]; a == b; //false a == '1,2,3'; //true; // var c = []; B ...
 - node.js整理 07例子
		
需求 一个简单的静态文件合并服务器,该服务器需要支持类似以下格式的JS或CSS文件合并请求. http://assets.example.com/foo/??bar.js,baz.js 在以上URL中 ...
 - node.js整理 06异步编程
		
回调 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了 function heavyCompute(n, callback) { var count = 0, i, j; for (i = ...
 - node.js整理 05进程管理
		
简介 NodeJS可以感知和控制自身进程的运行环境和状态,也可以创建子进程并与其协同工作,这使得NodeJS可以把多个程序组合在一起共同完成某项工作,并在其中充当胶水和调度器的作用 常用API Pro ...
 - node.js整理 03文件操作-遍历目录和文本编码
		
遍历目录 递归算法 遍历目录时一般使用递归算法,否则就难以编写出简洁的代码. 递归算法与数学归纳法类似,通过不断缩小问题的规模来解决问题 function factorial(n) { if (n = ...
 
随机推荐
- EBS中加载FORM使用的JavaBean的JAR包
			
1.SSH端,APP用户登录: 2.输入env,确定环境变量名称FORMS_WEB_CONFIG_FILE: 3.定位模板文件: $AD_TOP/bin/adtmplreport.sh con ...
 - windows XP上实现python2.7.5和python3.4.3共存
			
windows XP上实现python2.7.5和python3.4.3共存过程记录: 1. 首先安装python2.7.5和python3.4.3,两个版本安装顺序不分前后; 2. 检查系统环境变量 ...
 - C++ 共享内存 函数封装
			
#pragma once #include <string> #include <wtypes.h> #include <map> using namespace ...
 - Delphi XE7中各种字符串与字符类型的内存结构
			
1. ShortString 类型 定义:type ShortString = string[255]; 内存结构与大小:ShortString 是每个字符为单字节的字符串.ShortString 的 ...
 - php简单框架的应用实例
			
<html> <frameset rows="50%,50%"> <frame src="/Test/header.php"> ...
 - C++编译期间字节序判断
			
当前常用的字节序一般就两种,大端序和小端序. 下面列出四种字节序的表达方式.在对应平台下,内存布局为{0x,00,0x01,0x02,0x03}的四字节,表示为十六进制的值就如下面代码所示的. END ...
 - WPF菜单
			
1.Menu Menu 是水平放置它的项的,默认情况下把灰色栏作为背景. 把Menu 添加到它的ItemsControl 基类的唯一公开的API 是IsMainMenu 属性.当为true(默认的)时 ...
 - POJ 2226二分图最大匹配
			
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是二部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图 ...
 - django rest framework 再撸体验
			
曾经了解过. 放在一边,嫌麻烦. 如今身为leader,站在团队沟通的角度看看,还不错. 有几个优点: 1. api一览表 2. api web预览界面(类似.net的webservice预览界面), ...
 - MVC中使用Entity Framework 基于方法的查询学习笔记 (三)
			
紧接上文,我们已经学习了MVC数据上下文中两个常用的类,这两个类承载着利用函数方式进行数据查询的全部内容,我们既然已经了解了DbSet<TEntity> 是一个泛型集合,并且实现了一些接口 ...