以Python角度学习Javascript(一)
记忆如沙指尖过,叹如果,何为如,何为果? 花季,风碾过,零落一地寂寞,谁明身该如何,土也湮没,雨坐,重刷遗地的香一抹。
认识javascript
JavaScript 是因特网上最流行的脚本语言。
JavaScript 是一种轻量级的编程语言。
JavaScript 被数百万计的网页用来改进设计、验证表单、检测浏览器、创建cookies,以及更多的应用。
JavaScript 是可插入 HTML 页面的编程代码。
JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。
JavaScript 很容易学习。
JavaScript 很容易使用!你一定会喜欢它的
一、如何编写
1、JavaScript代码存在形式
<!-- 方式一 --> <script type"text/javascript" src="JS文件"></script><!-- 方式二 --> <script type"text/javascript">Js代码内容 </script>
形式
2、JavaScript代码存放位置
- HTML的head中
- HTML的body代码块底部(推荐)
由于Html代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面,如果放置在body代码块底部,那么即使js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已。
二、变量
JavaScript中变量的声明是一个非常容易出错的点,局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量。
<script type="text/javascript">// 全局变量name = 'seven';function func(){// 局部变量var age = 18;// 全局变量gender = "男"} </script>
JavaScript中代码注释:
- 单行 //
- 多行 /* */
注意:此注释仅在Script块中生效。
三、数据类型
JavaScript 中的数据类型分为原始类型和对象类型:
- 原始类型
- 数字
- 字符串
- 布尔值
- 对象类型
- 数组
- “字典”
- ...
特别的,数字、布尔值、null、undefined、字符串是不可变。
// null、undefined null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。 undefined是一个特殊值,表示变量未定义。
1、数字(Number)
JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。
转换:
- parseInt(..) 将某值转换成数字,不成功则NaN
- parseFloat(..) 将某值转换成浮点数,不成功则NaN
特殊值:
- NaN,非数字。可使用 isNaN(num) 来判断。
- Infinity,无穷大。可使用 isFinite(num) 来判断。
判断类型:
typeof
更多数值计算:
常量Math.E 常量e,自然对数的底数。Math.LN10 10的自然对数。Math.LN2 2的自然对数。Math.LOG10E 以10为底的e的对数。Math.LOG2E 以2为底的e的对数。Math.PI 常量figs/U03C0.gif。Math.SQRT1_2 2的平方根除以1。Math.SQRT2 2的平方根。静态函数Math.abs( ) 计算绝对值。Math.acos( ) 计算反余弦值。Math.asin( ) 计算反正弦值。Math.atan( ) 计算反正切值。Math.atan2( ) 计算从X轴到一个点的角度。Math.ceil( ) 对一个数上舍入。Math.cos( ) 计算余弦值。Math.exp( ) 计算e的指数。Math.floor( ) 对一个数下舍人。Math.log( ) 计算自然对数。Math.max( ) 返回两个数中较大的一个。Math.min( ) 返回两个数中较小的一个。Math.pow( ) 计算xy。Math.random( ) 计算一个随机数。Math.round( ) 舍入为最接近的整数。Math.sin( ) 计算正弦值。Math.sqrt( ) 计算平方根。Math.tan( ) 计算正切值。Math
更多数值
2、字符串(String)
字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。
常见功能:
obj.length 长度
定义和用法 length 属性可设置或返回数组中元素的数目。 语法 arrayObject.length 实例 <script type="text/javascript">var arr = new Array(3) arr[0] = "John" arr[1] = "Andy" arr[2] = "Wendy"document.write("Original length: " + arr.length) document.write("<br />")arr.length=5 document.write("New length: " + arr.length)</script> 输出: Original length: 3 New length: 5
讲解
obj.trim() 移除空白
obj.trimLeft()
obj.trimRight()
obj.charAt(n) 返回字符串中的第n个字符
//字符中的字符从左向右进行索引,由0开始,字符串中的空格也算在内 案例: var string = "charAt find word position"; document.write("charAt find word position"+ "<br/>") document.write("string.charAt(0) is:" + string.charAt(0) + "<br/>"); document.write("string.charAt(1) is:" + string.charAt(1) + "<br/>"); document.write("string.charAt(2) is:" + string.charAt(2) + "<br/>"); document.write("string.charAt(3) is: " + string.charAt(3) + "<br/>"); document.write("string.charAt(4) is: " + string.charAt(4) + "<br/>"); document.write("string.charAt(5) is: " + string.charAt(5) + "<br/>"); document.write("string.charAt(6) is: " + string.charAt(6) + "<br/>"); document.write("string.charAt(7) is: " + string.charAt(7) + "<br/>"); document.write("string.charAt(string.length-2) is: " + string.charAt(string.length-2) + "<br/>") document.write("string.charAt(string.length-1) is: " + string.charAt(string.length-1) + "<br/>")//输出结果 string.charAt(0) is:c string.charAt(1) is:h string.charAt(2) is:a string.charAt(3) is: r string.charAt(4) is: A string.charAt(5) is: t string.charAt(6) is: string.charAt(7) is: f string.charAt(string.length-2) is: o string.charAt(string.length-1) is: n
详解
obj.concat(value, ...) 拼接
定义和用法concat() 方法用于连接两个或多个数组。 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。 语法 arrayObject.concat(arrayX,arrayX,......,arrayX)实例 例子 1在本例中,我们将把 concat() 中的参数连接到数组 a 中:<script type="text/javascript">var a = [1,2,3]; document.write(a.concat(4,5));</script> 输出:1,2,3,4,5例子 2在本例中,我们创建了两个数组,然后使用 concat() 把它们连接起来:<script type="text/javascript">var arr = new Array(3) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas"var arr2 = new Array(3) arr2[0] = "James" arr2[1] = "Adrew" arr2[2] = "Martin"document.write(arr.concat(arr2))</script> 输出:George,John,Thomas,James,Adrew,Martin例子 3在本例中,我们创建了三个数组,然后使用 concat() 把它们连接起来:<script type="text/javascript">var arr = new Array(3) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas"var arr2 = new Array(3) arr2[0] = "James" arr2[1] = "Adrew" arr2[2] = "Martin"var arr3 = new Array(2) arr3[0] = "William" arr3[1] = "Franklin"document.write(arr.concat(arr2,arr3))</script> 输出:George,John,Thomas,James,Adrew,Martin,William,Franklin
详解和案例
obj.indexOf(substring,start) 子序列位置
定义和用法indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 语法stringObject.indexOf(searchvalue,fromindex) 参数 描述 searchvalue 必需。规定需检索的字符串值。 fromindex 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。提示和注释注释:indexOf() 方法对大小写敏感!注释:如果要检索的字符串值没有出现,则该方法返回 -1。实例在本例中,我们将在 "Hello world!" 字符串内进行不同的检索:<script type="text/javascript">var str="Hello world!" document.write(str.indexOf("Hello") + "<br />") document.write(str.indexOf("World") + "<br />") document.write(str.indexOf("world"))</script> 以上代码的输出:0 -1 6
案例详解
obj.lastIndexOf(substring,start) 子序列位置
定义和用法lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。 语法stringObject.lastIndexOf(searchvalue,fromindex)案例:<script type="text/javascript">var str="Hello world world!"document.write(str.lastIndexOf("Hello") + "<br />")document.write(str.lastIndexOf("World") + "<br />")document.write(str.lastIndexOf("world"))</script> 以上代码的输出: 0 -1 12
View Code
obj.substring(from, to) 根据索引获取子序列
定义和用法substring() 方法用于提取字符串中介于两个指定下标之间的字符。 语法stringObject.substring(start,stop)参数 描述 start 必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。 stop 可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。如果省略该参数,那么返回的子串会一直到字符串的结尾。 实例 例子 1在本例中,我们将使用 substring() 从字符串中提取一些字符:<script type="text/javascript">var str="Hello world!" document.write(str.substring(3))</script> 输出:lo world! 例子 2在本例中,我们将使用 substring() 从字符串中提取一些字符:<script type="text/javascript">var str="Hello world!" document.write(str.substring(3,7))document.write(str.substring(3,str.length))//都行 </script> 输出:lo w
案例讲解
obj.slice(start, end) 切片
定义和用法slice() 方法可从已有的数组中返回选定的元素。 语法arrayObject.slice(start,end)参数 描述 start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。 end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。 返回值返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。 说明请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。 提示和注释注释:您可使用负值从数组的尾部选取元素。注释:如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。 实例 例子 1在本例中,我们将创建一个新数组,然后显示从其中选取的元素:<script type="text/javascript">var arr = new Array(3) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas"document.write(arr + "<br />") document.write(arr.slice(1) + "<br />") document.write(arr)</script> 输出:George,John,Thomas John,Thomas George,John,Thomas例子 2在本例中,我们将创建一个新数组,然后显示从其中选取的元素:<script type="text/javascript">var arr = new Array(6) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas" arr[3] = "James" arr[4] = "Adrew" arr[5] = "Martin"document.write(arr + "<br />") document.write(arr.slice(2,4) + "<br />") document.write(arr)</script> 输出:George,John,Thomas,James,Adrew,Martin Thomas,James George,John,Thomas,James,Adrew,Martin
案例讲解
obj.toLowerCase() 小写
定义和用法toLowerCase() 方法用于把字符串转换为小写。 语法stringObject.toLowerCase()返回值一个新的字符串,在其中 stringObject 的所有大写字符全部被转换为了小写字符。 实例在本例中,"Hello world!" 将以小写字母来显示:<script type="text/javascript">var str="Hello World!" document.write(str.toLowerCase())</script>
案例讲解
obj.toUpperCase() 大写
obj.split(delimiter, limit) 分割
定义和用法split() 方法用于把一个字符串分割成字符串数组。 语法stringObject.split(separator,howmany)参数 描述 separator 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。 howmany 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。 返回值一个字符串数组。该数组是通过在 separator 指定的边界处将字符串 stringObject 分割成子串创建的。返回的数组中的字串不包括 separator 自身。但是,如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)。 提示和注释注释:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。注释:String.split() 执行的操作与 Array.join 执行的操作是相反的。
详解
实例 例子 1在本例中,我们将按照不同的方式来分割字符串:<script type="text/javascript">var str="How are you doing today?"document.write(str.split(" ") + "<br />") document.write(str.split("") + "<br />") document.write(str.split(" ",3))</script> 输出:How,are,you,doing,today? H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,? How,are,you案例二: a = "alex7eric9uuuy"; a.split(/\d+/) 答案:["alex", "eric", "uuuy"] a.split(/(\d+)/) 答案:["alex", "7", "eric", "9", "uuuy" ] a.split(/(\d+)e/) 答案:["alex", "7", "ric", "9", "uuuy"]
案例
obj.search(regexp) 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
定义和用法search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。 语法stringObject.search(regexp)参数 描述 regexp 该参数可以是需要在 stringObject 中检索的子串,也可以是需要检索的 RegExp 对象。注释:要执行忽略大小写的检索,请追加标志 i。 返回值stringObject 中第一个与 regexp 相匹配的子串的起始位置。注释:如果没有找到任何匹配的子串,则返回 -1。 说明search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。 实例 例子 1在本例中,我们将检索 "W3School":<script type="text/javascript">var str="Visit W3School!" document.write(str.search(/W3School/))</script> 输出:6在下面的例子中,无法检索到 w3school(因为 search() 对大小写敏感)。<script type="text/javascript">var str="Visit W3School!" document.write(str.search(/w3school/))</script> 输出:-1例子 2在本例中,我们将执行一次忽略大小写的检索:<script type="text/javascript">var str="Visit W3School!" document.write(str.search(/w3school/i))</script> 输出:6
讲解及案例
obj.match(regexp) 全局搜索,如果正则中有g表示找到全部,否则只找到第一个。
定义和用法match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。 语法stringObject.match(searchvalue) stringObject.match(regexp)参数 描述 searchvalue 必需。规定要检索的字符串值。 regexp 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。 返回值存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
讲解
实例 例子 1在本例中,我们将在 "Hello world!" 中进行不同的检索:<script type="text/javascript">var str="Hello world!" document.write(str.match("world") + "<br />") document.write(str.match("World") + "<br />") document.write(str.match("worlld") + "<br />") document.write(str.match("world!"))</script> 输出:world null null world!例子 2在本例中,我们将使用全局匹配的正则表达式来检索字符串中的所有数字:<script type="text/javascript">var str="1 plus 2 equal 3" document.write(str.match(/\d+/g))</script> 输出:1,2,3
案例
obj.replace(regexp, replacement) 替换,正则中有g则替换所有,否则只替换第一个匹配项,
$数字:匹配的第n个组内容;
$&:当前匹配的内容;
$`:位于匹配子串左侧的文本;
$':位于匹配子串右侧的文本
$$:直接量$符号
1 a 2 "alex7eric9Euuy" 3 a.replace(/\d+/,"&") 4 "alex&eric9Euuy" 5 a.replace(/\d+/g,"&") 6 "alex&eric&Euuy" 7 a.replace(/\d+/g,"$") 8 "alex$eric$Euuy" 9 a.replace(/\d+/,"$") 10 "alex$eric9Euuy" 11 a.replace(/(\d+)/,"x") 12 "alexxeric9Euuy" 13 a.replace(/(\d+)/g,"x") 14 "alexxericxEuuy" 15 a.replace(/(\d+)/g,"$&"+"x") 16 "alex7xeric9xEuuy" 17 a.replace(/(\d+)\w+(\d+)/g, "$1$2") 18 "alex79Euuy" 19 a.replace(/(\d+)\w+(\d+)/g,"$2$1") 20 "alex97Euuy" 21 a.replace(/(\d+)(\w+)(\d+)/g,"$3$1$2") 22 "alex97ericEuuy"
案例
1 a.replace(/\d+/g, "$`") 2 "alexalexericalex7ericEuuy" 3 a 4 "alex7eric9Euuy" 5 a.replace(/\d+/g, "$`") 6 "alexalexericalex7ericEuuy" 7 a.replace(/\d+/g, "$$") 8 "alex$eric$Euuy"
案例
3、布尔类型(Boolean)
布尔类型仅包含真假,与Python不同的是其首字母小写。
- == 比较值相等
- != 不等于
- === 比较值和类型相等
- !=== 不等于
- || 或
- && 且
4、数组
JavaScript中的数组类似于Python中的列表
常见功能:
obj.length 数组的大小 obj.push(ele) 尾部追加元素 obj.pop() 尾部获取一个元素 obj.unshift(ele) 头部插入元素 obj.shift() 头部移除元素 obj.splice(start, deleteCount, value, ...) 插入、删除或替换数组的元素obj.splice(n,0,val) 指定位置插入元素obj.splice(n,1,val) 指定位置替换元素obj.splice(n,1) 指定位置删除元素 obj.slice( ) 切片 obj.reverse( ) 反转 obj.join(sep) 将数组元素连接起来以构建一个字符串 obj.concat(val,..) 连接数组 obj.sort( ) 对数组元素进行排序
实例 例子 1在本例中,我们将创建一个数组,并按字母顺序进行排序:<script type="text/javascript">var arr = new Array(6) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas" arr[3] = "James" arr[4] = "Adrew" arr[5] = "Martin"document.write(arr + "<br />") document.write(arr.sort())</script> 输出:George,John,Thomas,James,Adrew,Martin Adrew,George,James,John,Martin,Thomas亲自试一试 例子 2在本例中,我们将创建一个数组,并按字母顺序进行排序:<script type="text/javascript">var arr = new Array(6) arr[0] = "10" arr[1] = "5" arr[2] = "40" arr[3] = "25" arr[4] = "1000" arr[5] = "1"document.write(arr + "<br />") document.write(arr.sort())</script> 输出:10,5,40,25,1000,1 1,10,1000,25,40,5请注意,上面的代码没有按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:<script type="text/javascript">function sortNumber(a,b) { return a - b }var arr = new Array(6) arr[0] = "10" arr[1] = "5" arr[2] = "40" arr[3] = "25" arr[4] = "1000" arr[5] = "1"document.write(arr + "<br />") document.write(arr.sort(sortNumber))</script> 输出:10,5,40,25,1000,1 1,5,10,25,40,1000
sort使用案例
2、简单数组自定义排序<script type="text/javascript">var arrSimple2=new Array(1,8,7,6);arrSimple2.sort(function(a,b){return b-a});document.writeln(arrSimple2.join());</script>解释:a,b表示数组中的任意两个元素,若return > 0 b前a后;reutrn < 0 a前b后;a=b时存在浏览器兼容简化一下:a-b输出从小到大排序,b-a输出从大到小排序。
简单数组自定义排序
四、其他
1、序列化
- JSON.stringify(obj) 序列化
var a = {a:1,b:2} document.write(JSON.stringify(a)) 结果: {"a":1,"b":2}
- JSON.parse(str) 反序列化
var str = '{"name":"lala","age":"23"}'; document.write(JSON.parse(str)); 答案: [object, object]
2、转义
- decodeURI( ) URl中未转义的字符
- decodeURIComponent( ) URI组件中的未转义字符
- encodeURI( ) URI中的转义字符
- encodeURIComponent( ) 转义URI组件中的字符
- escape( ) 对字符串转义
- unescape( ) 给转义字符串解码
- URIError 由URl的编码和解码方法抛出
3、eval
JavaScript中的eval是Python中eval和exec的合集,既可以编译代码也可以获取返回值。
- eval()
- EvalError 执行字符串中的JavaScript代码
定义和用法eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 语法eval(string)参数 描述 string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。例子 1在本例中,我们将在几个字符串上运用 eval(),并看看返回的结果:<script type="text/javascript">eval("x=10;y=20;document.write(x*y)")document.write(eval("2+2"))var x=10 document.write(eval(x+17))</script> 输出:200 4 27
详解及案例
4、正则表达式
JavaScript中支持正则表达式,其主要提供了两个功能:
- test(string) 用于检测正则是否匹配
- exec(string) 用于获取正则匹配的内容
更多操作参见:http://kb.cnblogs.com/page/80965/
注:定义正则表达式时,“g”、“i”、“m”分别表示全局匹配,忽略大小写、多行匹配。
5、时间处理
JavaScript中提供了时间相关的操作,时间操作中分为两种时间:
- 时间统一时间
- 本地时间(东8区)
更多操作参见:http://www.shouce.ren/api/javascript/main.html
五、语句和异常
1、条件语句
JavaScript中支持两个中条件语句,分别是:if 和 switch
if(条件){}else if(条件){}else{}
if语句
switch(name){case '1':age = 123;break;case '2':age = 456;break;default :age = 777;}
switch语句
2、循环语句
JavaScript中支持三种循环语句,分别是:
var names = ["alex", "tony", "rain"];for(var i=0;i<names.length;i++) {console.log(i);console.log(names[i]); }
方式一:
var names = ["alex", "tony", "rain"];for (var index in names) {console.log(index);console.log(names[index]); }
方式二:
while(条件){// break;// continue; }
方式三
注:字典不支持i++方式
3、异常处理
try {//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行 } catch (e) { //catch 意思是捕获// 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。//e是一个局部变量,用来指向Error对象或者其他抛出的对象 } finally {//无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。 }
注:主动跑出异常 throw Error('xxxx')---类似于python的raise
六、函数
1、基本函数
JavaScript中函数基本上可以分为一下三类:
//普通函数function func(arg) {return true; } //匿名函数var func = function(arg){return "tony"; }
function test(_param,_callback){
处理....
_callback(处理完的参数)
}
test(123,function(a){alert(a)})
//自执行函数(function(arg){console.log(arg); })
注意:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。
2、作用域
JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,如果不存在,则异常。
// name = "alex"; // function f1() {// var name = "eric"; // function f2() {// alert(name) // }; // f2(); // }; // // f1();
View Cod
name = "alex"; function f1() {var name = "eric";function f2() {alert(name);}return f2 } var ret = f1(); ret();
function f2(){var arg= [11,22];function f3(){console.log(arg);}arg = [44,55];return f3;}ret = f2();ret();
演示
注:声明提前,在JavaScript引擎“预编译”时进行。
五句话搞定JavaScript作用域:http://www.cnblogs.com/wupeiqi/p/5649402.html
3、闭包
「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
闭包是个函数,而它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」
由于作用域链只能从内向外找,默认外部无法获取函数内部变量。闭包,在外部获取函数内部的变量。
function f2(){var arg= [11,22];function f3(){a = 123;return a;}return f3; }ret = f2(); ret(); 已这个例子为例,f2就是一个闭包,那么我在执行调用的时候只能通过f2去调用,也就是由外向内去获取调用;而不能由内向外
4、面向对象
function Foo (name,age) {this.Name = name;this.Age = age;this.Func = function(arg){ //相当于创建python的方法,但是这样每个对象都有,相对每个对象都会占有一份地址return this.Name + arg;} }
对于上述代码需要注意:
- Foo充当的构造函数 ---class className()
- this代指对象 -----self.Name = name
- 创建对象时需要使用 new
上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题:
function Foo (name, age) {this.Name = name;this.Age = age; } Foo.prototype = {GetInfo: function(){return this.Name + this.Age;},Func : function(arg) {return this.Name + arg;} }Foo.prototype.Func = function () {return this.Name + this.Age};//第二种方法 obj1 = new Foo('damon', 18) ret = obj1.Func();
转载于:https://www.cnblogs.com/renfanzi/p/5649543.html
以Python角度学习Javascript(一)相关推荐
- python基础学javascript_以Python角度学习Javascript(一)
记忆如沙指尖过,叹如果,何为如,何为果? 花季,风碾过,零落一地寂寞,谁明身该如何,土也湮没,雨坐,重刷遗地的香一抹. 认识javascript JavaScript 是属于网络的脚本语言! Java ...
- 前端猎奇系列之探索Python来反补JavaScript——上篇
写在最前 人生苦短,我用 JavaScript. 然鹅,其他圈子里还流行这样一句话:人生苦短,我用 Python. 当然还有什么完美秀发编程,这就不提了.当你在前端学到一定地步的时候,你会有种想出去看 ...
- python系统学习1-程序设计的基本方法
一.程序设计基本方法 计算机与程序设计 编译和解释 程序的基本编写方法 计算机编程 1.计算机与程序设计 (1).计算机是根据指令操作数据的设备 功能性:对数据的操作.表现为数据计算.输出输入处理和结 ...
- 熬夜整理了2021年Python最新学习资料,分享给学弟学妹们【大学生必备】
Python最新学习资料和视频 一.Python软件 安装教程 视频教程 二.学习规划 阶段一:Python基础 阶段二:Python核心编程 阶段三:web前端开发 阶段四:数据库 阶段五:后端开发 ...
- 学习JavaScript之前,这些知识你应该知道?
如果你想成为一名专业的程序员,你就需要在你的工具箱中安装 JavaScript. 如今,JavaScript 已成为就业市场上最受欢迎和需求量最大的语言之一.开发人员经常使用它来构建网站.设计游戏和制 ...
- 我最喜欢的9个 Python深度学习库
本文为数盟原创译文 如果你对深度学习和卷积神经网络感兴趣,但是并不知道从哪里开始,也不知道使用哪种库,那么这里就为你提供了许多帮助. 在这篇文章里,我详细解读了9个我最喜欢的Python深度学习库. ...
- 更快学习 JavaScript 的 6 个思维技巧
2019独角兽企业重金招聘Python工程师标准>>> 我们在学习JavaScript,或其他任何编码技能的时候,往往是因为这些拦路虎而裹足不前: 有些概念可能会造成混淆,尤其当你是 ...
- 怎么自学python自动化测试-学习自动化测试,如何学习Python语言?
一.Python常用领域Python用于简单脚本编程,如编写2048小游戏或12306的自动抢票软件: Python用于系统编程,如开发系统应用: Python用于开发网络爬虫: 有资料奉上,可以看看 ...
- python学习路线-Python最佳学习路线
Python最佳学习路线 如何学习Python 最近开始整理python的资料,会陆续放到博客中存档.找了几个qq群,其中有一个群78486745(点击进群).后面就没怎么加群了,还是需要看官方文档为 ...
最新文章
- 多选月份的日期选择器_GitHub - ylmyg/SelectionTime: Android下日期选择器,支持范围选择、多选、单选、根据输入天数选择日期...
- Sublime Text3 如何安装、删除及更新插件
- 硬件知识:什么是扩展坞,看完你就明白了!
- 关于图片预加载的思考
- 苹果电脑上使用linux环境变量,mac系统下修改环境变量
- Java文件类String [] list(FilenameFilter fnf)方法,带示例
- 性能测试脚本之SQLServer执行语句
- 一招教你数据仓库如何高效批量导入与更新数据
- ktm390蓝牙连接安卓_车机蓝牙连接常见问题说明
- 天下的母亲都是一样的
- 军用装备产品GJB150A淋雨试验检测机构
- php云erp进销存v8安装,PHP仿金蝶云ERP进销存V8网络多仓版源码
- 桌面cpu与服务器cpu天梯,桌面CPU性能排行 桌面CPU天梯图2017年6月最新版
- CSDN20181212博客黑板报
- iphone不支持webp图片格式处理方案
- 循环时尚是消费者与电商平台的一场“双向奔赴”?
- springboot项目制作漂亮的banner
- Windows 10 截图工具
- 快速将MP3音频转换为WAV的软件
- 融合通信无人值守系统解决方案
热门文章
- python的非法变量名_Statsmodels(Patsy)非法变量名/“Series”对象不可调用E
- 软考和高项哪个更好考?
- 海洋主题绘画_儿童画创意 | 三个海洋主题课例分享,超有创意的教程
- 知识图谱技术原理介绍
- torchtext中文文本预处理使用流程文档
- 【有限元分析】异型密封圈计算泄漏量与参数化优化过程(带分析源文件)
- Linux——shell
- Visual Studio2012 编译 gtest 遇到 error C2977: ‘std::tuple‘ : too many template argum...
- SSL Tomcat 双向认证
- 如何批量重命名图片,文档,文件夹名字 Windows CMD 批量修改文件名字 内含修改路径的操作,想改哪里改哪里!