浅谈JavaScript的语言特性
一片很好的JSer入门和复习查阅的帖子;
-------------------------------------------------------------------------------------------------------------------------------
JS - OO思想
ECMA-262 定义对象为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”
严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而且每个名字都映射到一个值。正因为这样,我们可以把ECMAScript的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。
1、特殊事件
<!-- 此为浏览器出发基于 javascript 的引擎,来执行js程序 --> <a href="javascript:alert('helloWorld!')"> 点我</a> <!--该为基于事件,基于onclick事件 --> <a href="1.html" onclick="alert('helloWorld!')"> 点我</a>
2、Js声明变量
<script type="text/javascript" > var i = 100; //此为Js声明的若变量 ii = 100; // Js中不用“var”声明变量,Js则认为此为全局变量, //除非是你想使用全局变量,否则不建议这样使用,避免Js程序变量冲突 </script>
3、理解函数传入的参数
<script type="text/javascript" > /* ECMAScript函数的参数:函数不介意传递多少个参数进来,哪怕不定义传入参数,函数也能已数组形式接受参数 * 通过arguments[i] 来获取传入参数。 */ function clickMe() { alert('ClickMe say : '+arguments[0]+' ; '+arguments[1]); } </script> <div> <input type="button" name="点我22" value="点我22" onclick="clickMe('你好','你不好')" /> </div>
例如:
<body> <script type="text/javascript" > function clickMe(a) { alert('ClickMe say : ' + a + ' ; ' + arguments[0]); } </script> <input type="button" name="点我22" value="点我22" onclick="clickMe('你好','你不好')" /> </body>
4、JS中没有重载,遇到相同函数名不同参数时,后面的函数回覆盖前面的函数。
5、with(location)和try...catch(e)
<head runat="server"> <script type="text/javascript" > function clickMe() { /* 引用类型 */ /* 使用Object引用类型创建对象 */ var person = new Object(); person.name = "cht"; person.age = 24; /* 使用“对象字面量”表示法,创建对象 */ var person2 = { name : "wjh" , age : 24 }; alert(person + " ; /n/r" + person2); } </script> </head>
6、引用类型
<head runat="server"> <script type="text/javascript" > debugger; //断点调试 function clickMe() { /* 引用类型 */ /* 使用Object引用类型创建对象 */ var person = new Object(); person.name = "cht"; person.age = 24; /* 使用“对象字面量”表示法,创建对象 */ var person2 = { name : "wjh" , age : 24 }; /* var person = new Object()等于var person = {}*/ alert(person + " ; /n/r" + person2); } </script> </head>
7、Array类型
<head runat="server"> <script type="text/javascript" > debugger; //断点调试 function clickMe() { /* Array 类型 */ /* Array对象创建*/ //1、普通 var person = new Array(); //2、2B var person = new Array(20); //3、文艺 var person = new Array("red","blue","green"); //4、NB var person = ["red","blue","green"]; </script> </head>
8、Js特殊对象arguments和this
<head runat="server"> <script type="text/javascript" > function clickMe() { alert(factorial(10)); } /* *JavaScript中两个特殊的对象:arguments和this * this : 不解释了 * arguments :只当前函数传递的参数,arguments已数组的方式存在; * arguments中有个特殊属性 callee,它指向拥有这个arguments函数的指针。 * */ function factorial(num) { if(num <= 1){ return 1 ; } else { alert(num); return arguments.callee(num - 1); //arguments.callee(num -1)执行当前arguments的函数,传入参数num-1(获取对当前执行的函数的引用) } } </script> </head>
9、ECMAScript -262面向对象,对象实例化(工厂方法,构造函数、原型模式),hasOwnProperty(),in的用法
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function clickMe() { /* 1、【弃用】实例化工厂方法对象 */ //debugger; /* 2、实例化构造函数对象 */ var person1 = new Person("tom", 12, "F"); person1.sayName(); /* 3、【常用】实例化原型模式对象 */ var superPerson = new SuperPerson(); superPerson.sayName(); /* PS: 实例拥有自己的属性存储空间, * superPerson.name = "11",屏蔽SuperPerson原型中的name属性, * 原型中的SuperPerson.prototype.name = "jenny",始终保存, * if (superPerson.hasOwnProperty("name")){//true 为实例中存在name属性} * if ("name" in SuperPerson){//true 为原型中存在name属性} */ } /* 构造函数,注意所有使用new的函数都可以叫做构造函数,构造函数的首字母要大写 * 如下: function Person(name,age,sex)中的Person,P需要大写。 */ function Person(name,age,sex) { this.name = name; this.sex = sex; this.age = age; this.sayName = function () { //定义函数,常犯错误 this.sayName = new function(){}; alert(this.name); }; } /* 原型模式:创建的每一个函数都有一个prototype(原型)属性,这个属性是一个“对象”,它的“用途” * 是包含可以有特定类型的所有实例共享的属性和方法。 * 按字面意思来理解,那么prototype就是通过调用构造函数而创建的那个对象的原型对象。 * */ function SuperPerson() { } /* 普通写法 */ SuperPerson.prototype.name = "jenny"; SuperPerson.prototype.age = 12; SuperPerson.prototype.sex = "M"; SuperPerson.prototype.sayName = function () { alert(this.name); }; /* 对象字面量 写法 */ SuperPerson.prototype = { constructor: Person , //将构造器指向Person name : "jenny01", age : 1201, sex : "M01", sayName: function () { alert(this.name); } }; </script> </head> <body> <form id="form1" runat="server"> <input type="button" name="点我 " value="点我 " onclick="clickMe()" /> </form> </body> </html>
(9、补充)
组合使用构造函数模式和原型模式,ECMAScript中最常用的使用方法:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function clickMe() { var person1 = new Person("tom1", 12, "F"); person1.sayFriends(); var person2 = new Person("tom2", 122, "F2"); person2.friends.push("3"); person2.sayFriends(); } /* 组合使用构造函数模式和原型模式,目前ECMAScript中广泛使用*/ /* * 将所有属性写在构造函数模式中,构造函数模式中,它的每个属性和方法都无法得到复用 */ function Person(name,age,sex) { this.name = name; this.sex = sex; this.age = age; this.friends = ["1111", "2222"]; } /* * 将所有方法写在原型模式中,prototype属性来指定哪那些应该共享的属性和方法。 */ Person.prototype = { constructor: Person, sayFriends: function () { var friends = "["; for (var i in this.friends) { friends = friends + this.friends[i].valueOf() + " , "; } friends = friends + "]"; alert(friends); } }; </script> </head> <body> <form id="form1" runat="server"> <input type="button" name="点我 " value="点我 " onclick="clickMe()" /> </form> </body> </html>
相关推荐
"前端学习笔记-黑马程序员JS" ...这篇前端学习笔记涵盖了 JavaScript 的基础知识,包括变量、数据类型、运算符、流程控制、数组、函数、对象、内置对象和 Web APIs 等知识点,为学习 JavaScript 提供了系统的指导。
JavaScript,简称JS,是由Brendan Eich在1995年创造的一种高级编程语言,最初目的是为了增强网页的交互性,特别是在前端进行表单验证。...这些类型构成了JS编程的基础,理解和掌握它们是学习JavaScript的第一步。
这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...
【标题】:“DWR学习笔记-HelloWorld篇” 在IT领域,DWR(Direct Web Remoting)是一个开源的Java框架,它允许JavaScript在浏览器端直接调用服务器端的Java方法,实现了网页与服务器的实时交互,类似于Ajax技术,但...
一个周前自己较系统地学完 javascript,但老感觉自己对基础语法部分的掌握不够扎实,javascript 的基础语法内容实在是丰富灵活,但这部分是进大厂必不可缺的知识,于是花了不少时间耐心整理了这篇笔记,以此夯实基础...
本篇将围绕“HotApp云笔记 - 精品开源demo”这一项目,深入解析如何利用微信小程序框架,结合免费API,构建一个实用的云笔记应用。 一、微信小程序基础概念 微信小程序是一种无需下载安装即可使用的应用,它实现了...
本篇笔记将深入探讨jQuery的基础知识,包括其核心概念、选择器、DOM操作、事件处理、动画效果以及Ajax应用。 ### 1. jQuery核心概念 jQuery的核心思想是“write less, do more”。它通过封装JavaScript的一些常见...
总的来说,李立超的JavaScript基础篇教程涵盖了语言的基础知识,包括其历史、特点、基本语法、数据类型、变量和标识符的使用,以及代码编写的位置和方式,是学习JavaScript入门的宝贵资料。通过深入理解和实践这些...
2. 设置Cookie的HttpOnly属性:当设置Cookie时,加上HttpOnly参数可以防止JavaScript访问Cookie,这能降低Cookie被XSS攻击窃取的风险。HttpOnly在较旧的IE6及以后版本中都得到了支持,但并不能完全防止所有类型的XSS...
### Gwt-ext学习笔记之基础篇 #### 一、安装CypalStudio工具 为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1....
这篇“ExtJS笔记——Grid实现后台分页”探讨了如何在ExtJS的Grid组件中实现高效的后台分页功能。 后台分页是一种常见的数据处理策略,特别是在大数据量的情况下,它将数据分批加载,避免一次性加载所有记录导致的...
标题中的"Gwt-Ext学习笔记之基础篇"指的是关于Gwt-Ext的初级教程,这是一种基于Google Web Toolkit (GWT) 的扩展库,用于构建富互联网应用程序(RIA)。Gwt-Ext提供了丰富的用户界面组件,使得开发者可以利用Java语言...
本篇文章将深入探讨如何使用`VTK`来绘制等值线,这是一个用于展示数据分布和特征的重要工具。等值线是连接相同值点的曲线,常用于气象、地理、物理等领域表示连续变量的分布。 首先,`PolygonContourDemo.java`和`...
本篇PHP笔记涵盖了从基础到进阶的知识点,适合初学者和有一定基础的开发者参考学习。主要内容包括简单的“Hello World”示例、网页内容抓取技巧、编码转换方法、缓存逻辑设计、数据解析方式、Ajax与PHP之间的交互、...
总的来说,这篇JS笔记涵盖了JavaScript基础中的窗口操作、用户交互和DOM操作。对初学者而言,理解并掌握这些基本概念是进一步学习更复杂JavaScript技术的基础,例如AJAX异步通信、DOM遍历和操作、以及复杂的用户交互...
这篇学习笔记主要涉及了JavaScript的基础概念和一些高级特性,包括预编译、作用域、函数、对象原型、原型链、函数调用方式(如call、apply)、继承模式、对象克隆、数组操作、自定义类型判断以及错误处理机制。...
这篇EXT学习笔记主要涵盖了EXTJS中面向对象编程的一些关键概念和实践,包括命名空间、类定义、构造函数、属性与方法的访问控制(私有和公有)、静态属性与方法以及继承机制。 1. **命名空间**:在EXTJS中,命名空间...
这篇“web学习笔记——javascript基础”将带你走进JavaScript的世界,理解其基本概念和常用语法。 JavaScript语法基础: 1. 变量:在JavaScript中,变量用于存储数据。声明变量使用`var`关键字,例如`var myVar = ...