JavaScript之原型模式
2016-07-01 14:21
477 查看
javascript是一种基于原型的,同时又是面向对象的语言,但是它并不存在类的概念,所谓的对象也并非从类中创建出来的,所有的javascript对象应该都是从某个对象上复制出来的。也就是javascript中所说的原型。
原型编程范型至少包括以下基本规则:
1.所有的数据都是对象
2.对象不是通过实例化类而是找到一个对象作为原型并复制它。
3.当某个对象无法响应某个请求时,会把该请求委托给自己的原型。
4.对象会记住它的原型
基本数据类型有:undefined,number,boolean,string,null。
复杂数据类型就是Object
除了undefined以外,都应该是对象。依据原型概念,所有的对象都应该有一个根对象,javascript中定义Object.prototype对象为根对象。可以用ECMA5中提供的Object.getPrototypeOf()来查看对象的原型。我们显示的调用var obj1 = new Object()或者var obj2 = {}时,引擎会从Object.prototype上克隆一个对象出来。所以我们最终得到的对象是具有根对象为原型的。
用new运算符从构造器中克隆一个对象:
上述的3,4点其实可以算在一起。javascript的原型链查找机制的前提是每个对象必须知道它的原型。
因此javascript给对象提供了一个_proto_的隐藏属性。默认会指向它的构造器的原型对象。
javascript对象最初都是由Object.prototype克隆来的,但对象构造器的原型不仅限于此,比如我们最常用的原型继承:
这是我的学习总结。以后应该会继续完善。
原型编程范型至少包括以下基本规则:
1.所有的数据都是对象
2.对象不是通过实例化类而是找到一个对象作为原型并复制它。
3.当某个对象无法响应某个请求时,会把该请求委托给自己的原型。
4.对象会记住它的原型
JavaScript原型模式
javascript的原型继承在ECMA5中才正式提出来,ECMA5提供了clone方法用来克隆对象。var Person = { name : 'zll', age : 20 }; var a = Object.create( Person ); console.log(a.name); //输出zll除此之外也可以运用prototype来实现。
JavaScript中的原型继承
javascript定义了两种类型机制:基本数据类型和复杂数据类型。基本数据类型有:undefined,number,boolean,string,null。
复杂数据类型就是Object
除了undefined以外,都应该是对象。依据原型概念,所有的对象都应该有一个根对象,javascript中定义Object.prototype对象为根对象。可以用ECMA5中提供的Object.getPrototypeOf()来查看对象的原型。我们显示的调用var obj1 = new Object()或者var obj2 = {}时,引擎会从Object.prototype上克隆一个对象出来。所以我们最终得到的对象是具有根对象为原型的。
用new运算符从构造器中克隆一个对象:
function Person( name ){ this.name = name; }; Person.prototype.getName = function(){ return this.name; }; var a = new Person( 'zll' );这里的Person不是一个类,而是函数构造器。javascript中的函数既可以作为普通函数被调用也可以作为构造器被调用。当使用new运算符来调用函数的时候,此时就作为构造器来使用。
上述的3,4点其实可以算在一起。javascript的原型链查找机制的前提是每个对象必须知道它的原型。
因此javascript给对象提供了一个_proto_的隐藏属性。默认会指向它的构造器的原型对象。
var a = new Object(); console.log( a._proto_ === Object.prototype ); //输出true
javascript对象最初都是由Object.prototype克隆来的,但对象构造器的原型不仅限于此,比如我们最常用的原型继承:
var obj = { name : 'zll' }; var A = function(){}; A.prototype = obj; var a =new A(); console.log( a.name ); //输出 zll //一个类继承另一个类 var B = function(){}; B.prototype = new A(); var b = new B(); console.log( b.name );
这是我的学习总结。以后应该会继续完善。
相关文章推荐
- 在html的JavaScript部分计算,保留小数点后面的位数
- js拼接table查询信息部分
- JavaScript中的枚举
- javascript的ajax请求过程
- js 实现定时对函数的调用setInterval()方法
- Jackson xml json
- 用JavaScript实现图片缓慢缩放效果
- js 把字符串转化为日期
- javascript中的闭包
- js函数——倒计时模块+无缝滚动
- JavaScript 中如何打印对象
- 访问WEB-INF目录中的JSP文件
- 【jmeter】JMeter中返回Json数据的处理方法
- js图片上传前检测大小
- js无间隙轮播图
- JSP指令--Page指令
- 判断数组中元素多个属性是否重复
- js输出指定n位数的随机数的随机整数方法【转发】
- js碎片
- atom markdown转换PDF 解决AssertionError: html-pdf: Failed to load PhantomJS module