我的javascript学习之路(一)对象之基础
做了2个多月的ajax项目,对js的学习觉得了深入了不少,把自己的一些学习的经验贴出来,希望对初学者有所帮助,也希望大家能指出我的错误之处或者不当之处。
javascript 是基于对象的语言,为什么这么说呢,需要仔细思考。
js的单根继承体系需要仔细了解,我觉得在js的世界里本身没有类的概念,他只有对象Object,不像java语言本身就有了Object然后又有Class,js中我们可以自己根据他的语言来构件类这一对象,因为没有语言本身的支持,所以方法就各种各样了,但是只要我们掌握了js的本质,不管方法如何我们都能很好的理解,可以比较各自的优缺点,在使用上各自的长处和短处。
一般object orentid language 具有以下5个特点:
1 封装 2 继承 3 多态 4 聚集 5 重载
javascript这些方面是怎么样实现的呢?
首先得了解什么叫对象,javascript 中对象分三类:
1 本地对象,即
javascript本身自带的对象,如javascript所有的引用类型,String Number Boolean Object Function Date Array RegExp Error...,这里有必要说一下javascript 的原型(primitive) 注意原型对象和他们的包装类(wrapper)(为引用对象)之间的区别和联系 他们有 string number boolean null undefined(有必要搞清楚这些基本的东东的用法和注意点哦,细节决定成败!) 。
javascript 语言和java一样都是 单根继承 ,所有javascript中所有的对象都继承自Object ,特别注意Function 也是的哦
2 内置对象 有Global 和 Math 两个
3 宿主对象
包括 bom 和 dom 中的对象
注意点 :
1 javascript 是弱语言(早期绑定和动态绑定),声明变量不需要指定对象类型(展开我们的想象,我认为我们对比到java的“RTTI机制”以及“反射机制”),弱我们可以理解为宽松,宽松必然导致灵活,在javascript中 我们定义类是非常方便的,我们看不到像java一样的很多的class文件。
javascript的基础:动态语言 弱类型(动态类型) 解释型,理解到位水平就很不错了,只需要这三个词哦.
早期绑定是指在对象被实例化之前对象的属性和方法已经被定义,使得编译器或解释器能够提前编译机器码。Java和VB支持这种特性,但ECMAScript 并非强类型,不支持早期绑定。
动态绑定是指编译器或解释器在运行时才知道该对象的具体类型,之前并不会检查,只会判断这些属性和方法是否得到该对象的支持。ECMAScript对所有的变量使用动态绑定。
2 javascript 对象没有方法或者函数的概念 因为所有javascript的方法 我们都可以理解成属性 作为指针指向内存中的无名函数体(function定义的)如:
- function Person (name ){
- this.name=name;
- this.showName= function (){alert(this.name);}
- }//showName运行时 对象创建 showName属性指向匿名函数对象:function (){alert(this.name);}
或者指向已命名的函数对象,如:
- function Person (name ){
- this.name=name;
- this.showName= showName;
- }
- function showName(){alert(this.name);}
//当然上面我只是简单举了2个例子,但是原理却是这样的。其实这里this.showName= showName 的showName 也是指向函数对象的指针,这样表示2指针指向了同一函数对象
所以针对javascript的反射 我们也很好解释为什么只需要用fot in
如:
Java代码 ![]()
- var person = new Person("jianfeng008cn");
- for(var property in person){
- alert("key:"+ property +"==>值:" + person[property]);
- }
3 javascript 是解释型语言 对象的层面上 我们可以这样理解 对象的生产的过程 我们可以看成该对象(比如说看成一段json格式的字符串)传给了javascript解释器 ,然后 解释器 如果有构造函数则执行该对象的构造函数,使指针属性指向函数对象(真正执行的时候才去判断内存中有没有,没有再生成)。
这个特点导致两方面我们需要特别注意:
1 javascript语言的特性我们需要从“运行时”这个角度来考虑,要有“时间轴”的概念
2 所以很多时候我们需要考虑:有时候同样的一段代码,上下两句的位置变化效果很是不同,一般都可以从解释型语言的对象的属性覆盖方面去考虑(试着比较就近原则)。
我的javascript学习之路(一)对象之基础的更多相关文章
- JavaScript学习06 JS事件对象
JavaScript学习06 JS事件对象 事件对象:当事件发生时,浏览器自动建立该对象,并包含该事件的类型.鼠标坐标等. 事件对象的属性:格式:event.属性. 一些说明: event代表事件的状 ...
- Javascript学习6 - 类、对象、继承
原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...
- JavaScript:学习笔记(9)——Promise对象
JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...
- JavaScript:学习笔记(10)——XMLHttpRequest对象
JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...
- Javascript学习笔记——操作浏览器对象
Javascript学习笔记 目前尝试利用javascript去对于一个浏览器对象完成一系列的访问及修改, 浏览器是网页显示.运行的平台,常用的浏览器有IE.火狐(Firefox).谷歌(Chrome ...
- javascript学习笔记02--面向对象学习
js面向对象编程 1. javascript 是一种基于对象的编程 object-based(基于对象):遇到的所有对象都是对象2.javascript没有类class,但是有新的原型对象,习 ...
- 小白的CTF学习之路2——二进制数据基础与运算(上)
今天的第二更,被我拖到了傍晚,嘿嘿,二进制这方面让本就数学不好的我很头疼,所以研究了一段时间 在学习之前我们先了解几个问题: 32位是几个字节? 01011100对于十进制是多少? 00001111向 ...
- JavaScript学习笔记之原型对象
本文是学习<JavaScript高级程序设计>第六章的笔记. JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返 ...
- JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
随机推荐
- Php 笔记3-----php与 asp的等价关系
对比asp.net 与 php的对比 ,有助于进一步理解 php. 1 输出. asp.net 输出 Response.Write(str); // 将string 写入到 服务器向浏 ...
- 了解一下jsp
本着和大家共同学习jsp的原则,今天谈一谈jsp. 首先,JSP(全称JavaServer Pages)是由Sun Microsystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户 ...
- MFC中TRACE
错误 1 error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shar ...
- Juniti学习总结
JUnit简介 JUnit是由 Erich Gamma和Kent Beck编写的一个回归测试框架(regression testing framework).JUnit测试是程序员测试,即所谓白盒测试 ...
- 苹果官网 demo The Elements 阅读随笔
The Elements https://developer.apple.com/library/ios/samplecode/TheElements/Introduction/Intro.html# ...
- 想要完全导入swc中的所有类
其实还有个这个办法.修改参数.-include-libraries library [...] 强制导入SWC文件中的所有类,不管是否曾使用过这个类 (((比如把swc文件放到src里,然后编译参数加 ...
- 第二百三十天 how can I 坚持
上周日去蟒山摘的松子吗?应该是松子吧,裂开了呢.为啥呢.原来博客园可以上传图片,只是上传起来好费劲啊. 今天程哥问给我分的活多不多,我竟然说了句好多,哎.其实很多问题可以用还好来回答,还好,还行,哈哈 ...
- deque 居然已经实现了 insert 接口
最近有个开发需求,根据server传递来的广告位来展示某条广告. 但最终存储广告的数据结构是deque,里面存储的东西还是对象(stl 基于拷贝语义). 想了半天,在开头和结尾插入比较方便,在中间插入 ...
- HDU 2042 不容易系列之二 [补6.24] 分类: ACM 2015-06-26 20:40 9人阅读 评论(0) 收藏
不容易系列之二 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、Server.MapPath(转载)
1.Request.ApplicationPath->当前应用的目录 Jsp中, ApplicationPath指的是当前的application(应用程序)的目录,ASP.NET中也是这个 ...