关于js原型继承
2016-05-04 16:16
369 查看
js的每个类都有一个prototype对象 访问对象的属性时,会先访问到对象自身是否有定义这个属性 如果没有定义,就会去访问对象所属类型的prototype对象是否有此属性
原型继承就是把类型的prototype指向一个父类的新对象,这样每派生一个新类出来都会构造一个新的父类对象作为原型,这个对象和父类的prototype是分离的 因而可以用于添加子类的新属性而不影响父类
在构造函数中赋值的属性也能被派生类中使用,因为每个对象都运行了一次构造函数,每个对象都有一个此属性的定义 并且这个属性是优先于prototype里的属性的 比如下面的例子:
其实这个和LUA利用元数据表的模拟继承非常相似
关于原型继承的写法可以参见:
http://www.cnblogs.com/yangjinjin/archive/2013/02/01/2889368.html
原型继承就是把类型的prototype指向一个父类的新对象,这样每派生一个新类出来都会构造一个新的父类对象作为原型,这个对象和父类的prototype是分离的 因而可以用于添加子类的新属性而不影响父类
> function cls(){xx = function(){console.log(11)}} undefined > cls.prototype.xx = function(){console.log(22)} [Function] > var x = new cls() undefined > x.xx() 22 undefined > x.xx = function(){console.log(33)} [Function] > x.xx() 33 undefined > x instanceof cls true > cls.prototype.xx = function(){console.log(55)} [Function] > x.xx() 33 undefined > var y = new cls() undefined > y.xx() 55 undefined > cls.prototype.xx = function(){console.log(123)} [Function] > y.xx() 123 undefined > cls.prototype cls { xx: [Function] } > typeof cls.prototype 'object' >
在构造函数中赋值的属性也能被派生类中使用,因为每个对象都运行了一次构造函数,每个对象都有一个此属性的定义 并且这个属性是优先于prototype里的属性的 比如下面的例子:
> function cls(){this.p=11} undefined > cls.prototype.p = 22 22 > var obj = new cls() undefined > obj.p 11 >
其实这个和LUA利用元数据表的模拟继承非常相似
关于原型继承的写法可以参见:
http://www.cnblogs.com/yangjinjin/archive/2013/02/01/2889368.html
相关文章推荐
- javascript 匿名函数的理解(透彻版)
- FastJSON 简介及其Map/JSON/String 互转
- js利用数组创建图片对象
- 对象的创建:工厂模式/构造函数模式/原型模式 (笔记)
- JS只能输入数字,数字和字母等的正则表达式
- JS转换HTML转义符
- .net面试题(.Net+Html+Javascript)
- js
- nwjs学习笔记--01
- Javascript 严格模式详解
- JavaScript 复选框全选和反选
- 常用正则表达式大全,手机、电话、邮箱、身份证(最严格的验证)、IP地址、网址、日期等,一般前台js验证,来这里就够了...
- ionic js学习笔记
- json model 转换
- JavaScript中的模块化之AMD和CMD
- 100个常用的原生JavaScript函数
- JS Replace() 全部替换字符的用法
- 字符转换为数字的方法
- js验证账户名是否重复
- MVC WebApi 将返回值改为JSON格式