JavaScript内核笔记07-面向对象
来源:互联网 发布:java gzip 压缩 乱码 编辑:程序博客网 时间:2024/06/04 01:26
JavaScript是基于对象的而非基于类,但是,JavaScript的的函数式语言的特性使得它本身是可编程的,它可以变成你想要的任何形式。JavaScript的OO风格代码开发:
1、原型继承
JavaScript中的继承可以使用原型链来实现,调用对象上的一个方法,由于方法在JavaScript对象中是对另一个函数对象的引用,因此解释器会在对象中查找该属性,如果没有
找到,则在其内部对象prototype对象上搜索,由于prototype对象和对象本身的结构是一样的,因此这一个过程会一直回溯到发现该属性,则调用该属性,否则报告一个错误。
关于原型继承,如下例:
//原型继承function Base(){this.baseFunc=function(){alert("base behavior");}}function Middle(){this.middleFunc=function(){alert("middle behavior");}}Middle.prototype=new Base();//继承Basefunction Final(){this.finalFunc=function(){alert("final behavior");}}Final.prototype=new Middle();//继承Middlefunction test(){var obj=new Final();obj.baseFunc();obj.middleFunc();obj.finalFunc();}test();
2、引用
JavaScript的应用和其他语言的不同之处在于,它的引用始终指向最终的对象,而非引用本身,如下例:
//引用实例var obj={};//空对象var ref=obj;obj.name="objectA";alert(ref.name);//ref也跟着增加了name属性obj=["one","two","three","four"];//obj指向了另外一个对象(数组对象)alert(ref.name);//ref还指向原来的对象alert(obj.length);//3alert(ref.length);//undefined //说明:<span style="font-size:18px;color:#ff0000;"><strong>obj只是对一个匿名对象的引用</strong></span>,因此,ref并非指向它,当obj指向另一个数组对象时可以看到,引用ref并没有改变。//而始终指向那个后来添加了name属性的“空”对象{}。。<strong>修改obj的指向不回影响到ref,但是修改原对象的值,则会影响到其引用对象</strong>。
3、new操作符
采用new操作符定义function对象,可以实现类似java一样的对象创建。而对于json格式的对象则不能用new来创建,function(){}这种默认构造定义的对象则可以。如:
var a={name:'name'};var b=new a(); 不可行
var a=function(){alert('3');};var b=new a(); 可行
4、封装
事实上,我们可以通过JavaScript函数实现封装,封装的好处在于,未经授权的客户代码无法访问到我们不公开的数据,如下例:
//封装,共有、私有的定义function Person(name){//私有变量privatevar address="China";//公有方法publicthis.getAddress=function(){return address;}//共有变量publicthis.name=name;}//通过原型prototype扩展方法,共有方法Person.prototype.getName=function(){return this.name;}Person.prototype.setName=function(name){this.name=name;}
<strong>Person.AGE=1000;//静态变量</strong>/* 说明:首先声明一个函数作为模板,用面向对象的术语来讲就是一个“类”,用var方式声明的变量仅在类内部可见,所以address是一个私有成员变量, 访问address的唯一方式是,<strong>通过暴露出来的getAddress方法,而set/getName方法均为原型链上的方法</strong>,因此为公开的。测试如下: */var jay=new Person("jay");alert(jay.name);//可以访问,返回:jayalert(jay.getName());//可以访问,返回:jayalert(jay.address);//无法访问,返回:undefinedalert(jay.getAddress());//可以访问,返回:China
<strong>alert(Person.AGE);//通过名字来访问</strong>
1 0
- JavaScript内核笔记07-面向对象
- javascript面向对象笔记
- [笔记]javascript面向对象 - 属性
- JavaScript面向对象编程笔记
- javascript面向对象学习笔记
- JavaScript面向对象的笔记
- javascript面向对象学习笔记2010.7.16
- javascript面向对象编程笔记01
- JavaScript 学习笔记十三 面向对象?
- javascript--关于面向对象的笔记
- 有关javaScript面向对象和原型笔记
- JavaScript笔记四:面向对象的程序设计
- JavaScript面向对象编程学习笔记
- 《JavaScript面向对象精要》— 笔记
- javascript面向对象编程---学习笔记
- JavaScript学习笔记之面向对象编程
- JavaScript笔记:面向对象的程序设计
- JavaScript面向对象笔记–原型
- SystemService与Manager机制
- 红米手机1内部存储空间不足怎么办?
- Redis数据备份持久化
- SBN使用教程总结
- Android M 新的运行时权限开发者需要知道的一切
- JavaScript内核笔记07-面向对象
- scala实现设计模式之职责链模式
- Elasticsearch权威指南(中文版)
- [leetcode] 12.Integer to Roman
- 微信开发学习路线
- Eclipse注释模板
- old-boy_LINUX
- Trie树统计词频和指定前缀的单词个数
- cocos2dx-ui的渲染机制