- 浏览: 613794 次
- 性别:
- 来自: 卡哇伊
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
一.摘要
本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些javascript细节. 适合希望巩固javascript理论知识和基础知识的开发人员阅读.
二.前言
最近面试过一些人, 发现即使经验丰富的开发人员, 对于一些基础的理论和细节也常常会模糊. 写本文是因为就我自己而言第一次学习下面的内容时发现自己确实有所收获和感悟. 其实我们容易忽视的javascript的细节还有更多, 本文仅是冰山一角. 希望大家都能通过本文有所收获.
三.Javascript面向对象
Javascript是一门面向对象的语言, 虽然很多书上都有讲解,但还是有很多初级开发者不了解.
创建对象
在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.other.name;
使用索引
如果objectA上有一个属性名称为"school.college", 那么我们没法通过"."访问,因为"objectA.school.college"语句是指寻找objectA的school属性对象的college属性.
这种情况我们需要通过索引设置和访问属性:
objectA["school.college"] = "BITI"; alert(objectA["school.college"]);
下面几个语句是等效的:
objectA["school.college"] = "BITI"; var key = "school.college"; alert(objectA["school.college"]); alert(objectA["school" + "." + "college"]); alert(objectA[key]);
JSON 格式语法
JSON是指Javascript Object Notation, 即Javascript对象表示法.
我们可以用下面的语句声明一个对象,同时创建属性:
/*JSON*/ var objectA = { name: "myName", age: 19, school: { college: "大学", "high school": "高中" }, like:["睡觉","C#","还是睡觉"] }
JSON的语法格式是使用"{"和"}"表示一个对象, 使用"属性名称:值"的格式来创建属性, 多个属性用","隔开.
上例中school属性又是一个对象. like属性是一个数组. 使用JSON格式的字符串创建完对象后, 就可以用"."或者索引的形式访问属性:
objectA.school["high school"]; objectA.like[1];
静态方法与实例方法
静态方法是指不需要声明类的实例就可以使用的方法.
实例方法是指必须要先使用"new"关键字声明一个类的实例, 然后才可以通过此实例访问的方法.
function staticClass() { }; //声明一个类 staticClass.staticMethod = function() { alert("static method") }; //创建一个静态方法 staticClass.prototype.instanceMethod = function() { "instance method" }; //创建一个实例方法
上面首先声明了一个类staticClass, 接着为其添加了一个静态方法staticMethod 和一个动态方法instanceMethod. 区别就在于添加动态方法要使用prototype原型属性.
对于静态方法可以直接调用:
staticClass.staticMethod();
但是动态方法不能直接调用:
staticClass.instanceMethod(); //语句错误, 无法运行.
需要首先实例化后才能调用:
var instance = new staticClass();//首先实例化 instance.instanceMethod(); //在实例上可以调用实例方法
四.全局对象是window属性
通常我们在<script>标签中声明一个全局变量, 这个变量可以供当前页面的任何方法使用:
<script type="text/javascript"> var objectA = new Object(); </script>
然而我们还应该知道, 实际上全局变量objectA是创建在window对象上, 可以通过window对象访问到:
window.objectA
五.函数究竟是什么
我们都知道如何创建一个全局函数以及如何调用:
function myMethod() { alert("Hello!"); } myMethod();
其实同全局对象一样, 使用function关键字创建的方法(也可以创建类)的名称, 实际上是为window对象创建了myMethod属性, 并且值是一个匿名方法, 上面的语句等同于:
window.myMethod = function() { alert("Hello!"); }
无论使用哪种方式声明, 实际保存时都是使用函数名创建window对象的属性(实际上函数是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 = "window name"; function showName() { alert(this.name); } o1.show = showName; window.show = showName; showName(); o1.show(); window.show();
结果:
结果证明在顶层调用函数和使用window对象调用函数时, this都指向window对象. 而在对象中调用函数时this指向当前对象.
七.javascript中的闭包
闭包的概念比较难以理解, 先看闭包的定义:
闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
简单表达:
闭包就是function实例以及执行function实例时来自环境的变量.
先看下面的例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <div id="divResult"></div> <script type="text/javascript"> function start() { var count = 0; window.setInterval(function() { document.getElementById("divResult").innerHTML += count + "<br/>"; count++; }, 3000); }; start(); </script> </body> </html>
count是start函数体内的变量, 通常我们理解count的作用于是在start()函数内, 在调用start()函数结束后应该也会消失.但是此示例的结果是count变量会一直存在,并且每次被加1:
因为count变量是setInterval中创建的匿名函数(就是包含count++的函数)的闭包的一部分!
再通俗的讲, 闭包首先就是函数本身, 比如上面这个匿名函数本身, 同时加上在这个函数运行时需要用到的count变量.
javascript中的闭包是隐式的创建的, 而不像其他支持闭包的语言那样需要显式创建. 我们在C#语言中很少碰到是因为C#中无法在方法中再次声明方法. 而在一个方法中调用另一个方法通常使用参数传递数据.
本文不再详细讲解闭包, 深入学习请参考下面的文章: http://www.felixwoo.com/archives/247
作者:张子秋
出处:http://www.cnblogs.com/zhangziqiu/
发表评论
-
简单选项卡制作方式
2009-10-26 15:16 1035<!DOCTYPE html PUBLIC " ... -
字体放大效果,字体[大][中][小]
2009-10-20 16:12 1090<!DOCTYPE html PUBLIC " ... -
JS中保留两位小数
2009-10-19 11:22 3243//这里使用字符串的"123.0000" ... -
JS中String,Date,Math常用函数
2009-10-11 18:25 3718String,Date,Math常用函数 ... -
eval,confirm,alert,prompt函数
2009-10-11 12:23 1499eval()函数JavaScript有许多小窍门来使编程更加容 ... -
深入浅出JSON
2009-10-02 20:27 693JSON定义 JSON(JavaScript Objec ... -
数据类型和Json格式
2009-10-02 19:53 9161. 前几天,我才知 ... -
防止网页被嵌入框架的代码
2009-10-02 17:31 914<script type="text/java ... -
学习javascrip闭包 (closure)
2009-10-02 16:53 880闭包(closure)是Javascript语言的一个难点 ... -
花点时间搞清top、postop、scrolltop、scrollHeight、offsetHeight
2009-09-30 18:41 17601. top 此属性仅仅在对象的定位(position ... -
document.write()和document.writeln()的区别
2009-09-18 11:06 8208解决思路: 两者都是JavaScript向客户端输出的方法,对 ... -
几个常用的小函数(检查是否为数字,否为电话号码,num是否是负数,检查是否为日期...)
2009-09-10 17:41 1166//函数名:chkemail//功能介绍:检查是否为Email ... -
为什么二月的天数比其他月少?
2009-09-06 09:10 1500——公元前46年,罗马皇帝恺撒在修改历法时,规定每年为12个月 ... -
iframe自适应高度
2009-09-01 23:40 3280Demo页面:主页面 iframe_a ... -
document.body和document.documentElement的区别
2009-09-01 22:25 2403document.body:是DOM中Document对象里的 ... -
从父页面读取和操作iframe中内容方法
2009-08-27 20:50 3680基本的操作方法: ... -
JsTAB选项卡示例集合(二)
2009-08-15 23:25 1823仿163的一款TAB选项卡,有的人也称它为网页标签。本标签用到 ... -
Js Tab选项卡示例集合
2009-08-15 23:22 7978清新选项卡(一个页面布局两个) 一个横排的清新选项卡, ... -
Js事件列表
2009-08-15 20:41 911js事件列表 onkeypress,onkeyd ... -
Javascript onerror事件及try....catch
2009-07-29 23:25 1109<script type="text/java ...
相关推荐
从零开始学习jQuery.pdf 从零开始学习jQuery.pdf
【从零开始学jQuery】这个教程旨在帮助初学者全面理解并掌握jQuery这一强大的JavaScript库。jQuery简化了HTML文档遍历、事件处理、动画设计和Ajax交互,是Web开发中的常用工具。 ### (一) 开天辟地入门篇 在入门...
### 从零开始学习jQuery:探索JavaScript脚本库的魅力 #### 深入理解jQuery:...无论你是初学者还是经验丰富的开发者,从零开始学习jQuery都将为你打开一个全新的编程世界,带你领略JavaScript脚本库的无限魅力。
《从零开始学习jQuery》是一本面向初学者的教程,旨在帮助读者系统地掌握JavaScript的基础以及jQuery库的应用。本文档采用Word格式,由知名博主“子秋”编写,提供了全面而深入的学习路径。 1. 你必须知道的...
本文作为“从零开始学习JQUERY”系列的第一篇文章,旨在为读者提供一个全面且实用的学习指南,无论你是初学者还是有一定基础的开发者都能从中受益。本文将详细介绍jQuery的基础知识,并通过简单的示例引导读者如何...
从零开始学习jquery教程,非常值得学习
### jQuery从零开始学习 #### 一、简介与概述 jQuery作为一款流行的JavaScript库,极大地简化了HTML文档遍历、事件处理、动画等任务,并且兼容多种浏览器。它以其轻量级、易用性和强大的功能著称,在Web前端开发...
从零开始学习jQuery pdf,第一篇:开天辟地入门篇;第二篇:jQuery最重要的部分——万能的选择器;第三章:管理Jquery包装集;第四章:使用jQuery操作元素的属性与样式;第五篇:事件与事件对象……
从零开始学JQuery
从零开始学习jQuery,不仅能够提升你的JavaScript编程技能,还能让你在Web开发领域游刃有余。随着对jQuery的深入学习,你会发现编写交互式的网页变得越来越轻松,同时也能够更好地应对复杂的前端挑战。无论是新手...
每篇文章都旨在帮助读者从零开始,逐步深入学习和掌握jQuery的各种使用技巧。 ### 开发环境搭建 学习jQuery的第一步是搭建开发环境。在Visual Studio中可以方便地配合使用jQuery,可以通过包管理器如NuGet安装...
《从零开始学习jQuery》是一份专为初学者设计的jQuery教程资料,旨在帮助读者快速掌握这个强大的JavaScript库。jQuery简化了HTML文档遍历、事件处理、动画制作和Ajax交互等任务,使得JavaScript编程变得更加简单易懂...
《从零开始学习jQuery教程_c#.net版》是一份针对初学者设计的全面教程,旨在帮助没有基础的读者快速掌握jQuery这一强大的JavaScript库。jQuery简化了JavaScript中的DOM操作、事件处理、动画效果以及Ajax交互,使得...
学习 jQuery 的旅程从理解基本概念开始,逐步掌握选择器、DOM 操作、事件处理和动画。通过实践和阅读高质量的资源,如《jQuery 实战》一书,可以深化理解并提高技能。记住,jQuery 的目标是简化 JavaScript 开发,让...