(剧场版)你必须知道的javascript.doc_第1页
(剧场版)你必须知道的javascript.doc_第2页
(剧场版)你必须知道的javascript.doc_第3页
(剧场版)你必须知道的javascript.doc_第4页
(剧场版)你必须知道的javascript.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一.摘要本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些javascript细节. 适合希望巩固javascript理论知识和基础知识的开发人员阅读.二.前言最近面试过一些人, 发现即使经验丰富的开发人员, 对于一些基础的理论和细节也常常会模糊. 写本文是因为就我自己而言第一次学习下面的内容时发现自己确实有所收获和感悟. 其实我们容易忽视的javascript的细节还有更多, 本文仅是冰山一角. 希望大家都能通过本文有所斩获.三.Javascript面向对象Javascript是一门面向对象的语言, 虽然很多书上都有讲解,但还是有很多初级开发者不了解. 创建对象ps: 以前写过一篇详细的创建对象的文章(原型方法, 工厂方法等)但是找不到了, 回头如果还能找到我再添加进来.下面仅仅简单介绍.在C#里我们使用new关键字创建对象, 在javascript中也可以使用new关键字:var objectA = new Object();但是实际上new可以省略:var objectA = Object();但是我建议为了保持语法一直, 总是带着new关键字声明一个对象.创建属性并赋值在javascript中属性不需要声明, 在赋值时即自动创建:objectA.name = my name;访问属性一般我们使用.来分层次的访问对象的属性:alert(objectA.name);嵌套属性对象的属性同样可以是任何javascript对象:var objectB = objectA;objectB.other = objectA;/此时下面三个值相当, 并且改变其中任何一个值其余两个值都改变objectA.name;objectB.name;objectB.;使用索引如果objectA上有一个属性名称为school.college, 那么我们没法通过.访问,因为objectA.school.college语句是指寻找objectA的school属性对象的college属性.这种情况我们需要通过索引设置和访问属性: objectAschool.college = BITI; alert(objectAschool.college);下面几个语句是等效的: objectAschool.college = BITI; var key = school.college alert(objectAschool.college); alert(objectAschool + . + college); alert(objectAkey);JSON 格式语法JSON是指Javascript Object Notation, 即Javascript对象表示法.我们可以用下面的语句声明一个对象,同时创建属性: /JSON var objectA = name: myName, age: 19, school: college: 大学, high school: 高中 , like:睡觉,C#,还是睡觉 JSON的语法格式是使用和表示一个对象, 使用属性名称:值的格式来创建属性, 多个属性用,隔开.上例中school属性又是一个对象. like属性是一个数组. 使用JSON格式的字符串创建完对象后, 就可以用.或者索引的形式访问属性:objectA.schoolhigh school;objectA.like1;静态方法与实例方法静态方法是指不需要声明类的实例就可以使用的方法.实例方法是指必须要先使用new关键字声明一个类的实例, 然后才可以通过此实例访问的方法. function staticClass() ; /声明一个类 staticClass.staticMethod = function() alert(static method) ; /创建一个静态方法 staticCtotype.instanceMethod = function() instance method ; /创建一个实例方法 上面首先声明了一个类staticClass, 接着为其添加了一个静态方法staticMethod 和一个动态方法instanceMethod. 区别就在于添加动态方法要使用prototype原型属性.对于静态方法可以直接调用:staticClass.staticMethod();但是动态方法不能直接调用:staticClass.instanceMethod(); /语句错误, 无法运行.需要首先实例化后才能调用: var instance = new staticClass();/首先实例化 instance.instanceMethod(); /在实例上可以调用实例方法四.全局对象是window属性通常我们在标签中声明一个全局变量, 这个变量可以供当前页面的任何方法使用: var objectA = new Object(); 然而我们还应该知道, 实际上全局变量objectA是创建在window对象上, 可以通过window对象访问到:window.objectA五.函数究竟是什么我们都知道如何创建一个全局函数以及如何调用: function myMethod() alert(Hello!); myMethod(); 其实同全局对象一样, 使用function关键字创建的方法(也可以创建类)的名称, 实际上是为window对象创建了myMethod属性, 并且值是一个匿名方法, 上面的语句等同于: window.myMethod = function() alert(Hello!); 无论使用哪种方式声明, 实际保存时都是使用函数名创建window对象的属性. 并且值只有函数体没有函数名称.所以,下面三种声明方式是等效的: function myMethod() alert(Hello!); window.myMethod = function() alert(Hello!); myMethod = function() alert(Hello!); 六.this究竟是什么在C#中,this变量通常指类的当前实例. 在javascript则不同, javascript中的this是函数上下文,不是由声明决定,而是由如何调用决定.因为全局函数其实就是window的属性, 所以在顶层调用全局函数时的this是指window对象.下面的例子可以很好的说明这一切: var o1 = name: o1 name ; = window name; function showName() alert(); o1.show = showName; window.show = showName; showName(); o1.show(); window.show();结果:结果证明在顶层调用函数和使用window对象调用函数时, this都指向window对象. 而在对象中调用函数时this指向当前对象.七.javascript中的闭包闭包的概念比较难以理解, 先看闭包的定义:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。简单表达:闭包就是function实例以及执行function实例时来自环境的变量.先看下面的例子: function start() var count = 0; window.setInterval(function() document.getElementById(divResult).innerHTML += count + ; count+; , 3000); ; start(); count是start函数体内的变量, 通常我们理解count的作用于是在start()函数内, 在调用start()函数结束后应该也会消失.但是此示例的结果是count变量会一直存在,并且每次被加1:因为count变量是setInterval中创建的匿名函数(就是包含count+的函数)的闭包的一部分!再通俗的讲, 闭包首先就是函数本身, 比如上面这个匿名函数本身, 同时加上在这个函数运行时需要用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论