javascript的常用对象常用的函数或对象有哪些

JavaScript函数、对象、经典语句及其基本应用大全_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
JavaScript函数、对象、经典语句及其基本应用大全
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩57页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢JavaScript的各种常见函数定义方法
投稿:shichen2014
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了JavaScript的各种常见函数定义方法,包含了一些技巧的测试与分析总结,需要的朋友可以参考下
本文详细讲述了JavaScript的各种常见函数定义方法,分享给大家供大家参考。具体分析如下:
首先看一下JavaScript最常见的四种函数定义:
用Function构造函数定义的函数,代码如下:
var multiply = new Function('x', 'y', 'return x *');
函数声明,这种方式也是最为常见的一种:
function multiply(x, y) {
return x *
函数表达式,声明为匿名函数然后赋值给一变量,很常见的方式:
var multiply = function(x, y) {
return x *
函数表达式,但是函数声明为命名函数再赋值给一变量,长得跟上一种方式真像:
var multiply = function multi(x, y) {
return x *
首先比较一下函数名,以及将函数赋值给的那个函数变量直接的关系,真绕……直观一点儿,从刚刚的例4说吧,就是multiply这个函数变量与multi这个函数名的关系:
函数名是不能够被修改的,相反的,函数变量是可以重新被赋值的。函数变量可以被重新赋值应该很好理解,我们第4个例子刚刚定义的multiply这个变量,看它不顺眼,重新赋值为:
multiply = function(x, y) {
return x +
立马摇身一变,从乘法变成加法了。但是multi这个函数变量想变就是不可能的了,函数定义已经在那儿了,只要还保留这它的引用,它就是不会变的,可能这里不大好理解,先这样想着,往下看,慢慢就应该能理解了。
函数名同时是无法在函数外部使用的,它只在函数体内部可见,一个很简单的例子:
var foo = function bar() {
alert('hello');
foo(); // 提示“hello”字符串
bar(); // 执行报错,bar未定义
和明显,这里的bar确实是一个函数名,但是它确实不能在外部调用。这时候肯定会有童鞋问干嘛这个例子还是长得那么乖,和例4一个样,怎么不用例2的方式呢?问得好,且听我慢慢分解。
继续说例4,我们可以看见函数名(multi)和函数变量(multiply),本不相同,其实两者根本就没有任何关系,因此没有保持一致的必要。说到这儿,我想上面4个例子应该可以精简到3个,例2和例4本质应该是一致的。什么,不信?嘻嘻,我还得继续卖关子哈~继续读下去~~
我们发现例2和例4相比,只不过少了var的函数变量,而例3与例4相比,只不过少了那个函数名,这里从现象上看,例2和例4的本质是相同的,铁证如下:
function foo() {}
alert(foo); // 提示包含“foo”的函数名
alert(bar); // 提示依然只包含“foo”的函数名,和bar半毛钱关系都没有
的确是铁证吧?上面的类似例2的代码结合起来写是不是就成例4的方式了?正确,这就是我刚刚所说的两者本质应该相同,只是用例2方式定义函数的时候,JS引擎帮我们做了一些事情,比如声明了函数名为multiply的函数,同时还悄悄定义了一个也叫multiply的变量,然后赋值给这个变量,两个完全一样的名字,我们自以为在使用函数名multiply的时候,实际是在用multiply这个函数变量,晕了吧~说实话,我也晕了~~总之我们调用的时候,实在用函数变量调用,而函数名是无法在外部调用函数的,因此有了我上述的推断。
但是这里要提到的一个小小的差别,函数声明方式定义的函数,与构造函数声明的或者函数表达式声明的不同之处在于,函数声明方式的函数可以在函数定义之前就调用……不说了,还是看代码:
foo(); // 提示Foo
function foo() {
alert('Foo');
bar(); // 哥们,和上面确实不一样,就不要逞能,这不报错了?提示bar未定义
var bar = function() {
alert('Bar');
再说说构造函数声明的函数,这样声明的函数是不会继承当前声明位置的作用域,它默认只会拥有全局作用域,然而这个是其他几种函数声明方式也一样有的,如下:
function foo() {
var hi = 'hello';
//return function() {
alert(hi);
return Function('');
foo()(); // 执行效果大家自己跑一下看看
可以想见,用构造函数声明返回的这个函数执行必然报错,因为其作用域(即全局作用域)中没有hi这个变量。
还有一点,就是往往大家要说构造函数方式声明的函数效率要低,这是为什么呢?今天从文档是得知是因为另外3种方式申明的函数只会被解析一次,其实他们存在于闭包中,但是那也只与作用域链有关,函数体是只会被解析一次的。但是构造函数方式呢,每次执行函数的时候,其函数体都会被解析一次,我们可以想想这样声明的函数是一个对象,其中存放了参数以及函数体,每次执行的时候都要先解析一次,参数和函数体,才会执行,这样必然效率低下。具体实验不知道如何做?
最后说一个大家都不怎么注意的地方,什么时候看似函数声明方式的方式却不是函数生命方式(还是这么绕~简单点儿说,就是例2的方式什么时候在不经意间就成其他方式了):
当成为表达式的一部分,就如同例3和例4。
不再是脚本本身或者函数的“源元素”(source element)。什么是源元素呢?即在脚本中的非嵌套语句或者函数体(A "source element" is a non-nested statement in the script or a function body),例如:
var x = 0;
// source element
if (x == 0) {
// source element
// not a source element, 因为嵌套在了if语句里
function boo() {}
// not a source element, 因为嵌套在了if语句里
function foo() {
// source element
var y = 20;
// source element
function bar() {}
// source element
while (y == 10) {
// source element
function blah() {} // not a source element, 因为嵌套在了while语句里
// not a source element, 因为嵌套在了while语句里
源元素的概念大概有了理解,继续刚刚说的函数声明,请看:
// 函数声明
function foo() {}
// 函数表达式
(function bar() {})
// 函数表达式
x = function hello() {}
// 函数表达式
function world() {}
// function statement
function a() {
// function statement
function b() {}
// 函数表达式
function c() {}
最后这里说一下我自己的理解,之所以要区分函数声明与非函数声明,因为在我看了,函数声明方式的函数定义,在JS解析引擎执行的时候会将其提前声明,也就是像我们刚刚上面说的那样,可以在函数定义之前使用,实际上是解析引擎在我们使用前已经将其解析了,但是非函数声明式,就像表达式函数声明,JS解析引擎只会把var声明的变量提前定义,此时变量值为undefined,而真正对这个变量的赋值是在代码实际所在位置,因此上述提到报错都是undefined,实际变量已经定义了,只是还没有赋值,JS解析引擎不知道它为函数。
相信本文所述对大家javascript WEB程序设计的有一定的借鉴价值。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具显示js对象所有属性和方法的函数
字体:[ ] 类型:转载 时间:
显示js对象所有属性和方法,从网上整理了不少,大家可以看下原理都是差不多的。
要想看到实际效果,可以先声明一些属性跟方法,否则是看不到,仔细往下看有例子的。 代码如下:function ShowObjProperty(Obj) { var PropertyList=''; var PropertyCount=0; for(i in Obj){ if(Obj.i !=null) PropertyList=PropertyList+i+'属性:'+Obj.i+'\r\n'; else PropertyList=PropertyList+i+'方法\r\n'; } alert(PropertyList); }
代码如下: &script type="text/javascript"& // 创建一个对象 myObject 以及三个属性 sitename, siteurl, sitecontent。 var myObject = new Object(); myObject.sitename = "布啦布啦"; myObject.siteurl = ""; myObject.sitecontent = "网页教程代码图库的中文站点"; //遍历对象的所有属性 for (prop in myObject) { document.write("属性 '" + prop + "' 为 " + myObject[prop]); document.write(" "); } &/script&
今天网上Java Tang博客找到了一个用来遍历JavaScript某个对象所有的属性名称和值的方法,这样想使用方法的时候非常的直观和方便。代码如下:
代码如下: /* * 用来遍历指定对象所有的属性名称和值 * obj 需要遍历的对象 * author: Jet Mah */ function allPrpos ( obj ) { // 用来保存所有的属性名称和值 var props = "" ; // 开始遍历 for ( var p in obj ){ // 方法 if ( typeof ( obj [ p ]) == " function " ){ obj [ p ]() ; } else { // p 为属性名称,obj[p]为对应属性的值 props += p + " = " + obj [ p ] + " \t " ; } } // 最后显示所有的属性 alert ( props ) ; }
AJAX的JavaScript的反射机制,反射机制指的是程序在运行时能够获取自身的信息。例如一个对象能够在运行时知道自己有哪些方法和属性。 在JavaScript中利用for(…in…)语句实现反射,其语法如下: for(var p in obj){ //语句 } 在Ajax编程中,经常要能动态的改变界面元素的样式,这可以通过对象的style属性来改变,比如要改变背景色为红色,可以这样写: element.style.backgroundColor="#ff0000"; 基本上CSS里拥有的属性在JavaScript中都能够使用:
代码如下: function setStyle(_style){ //得到要改变样式的界面对象 var element=getElement(); element.style=_ }
直接将整个style对象作为参数传递了进来:
代码如下: var style={ color:#ffffff, backgroundColor:#ff0000, borderWidth:2px }
这时可以这样调用函数: setStyle(style); 或者直接写为: setStyle({ color:#ffffff,backgroundColor:#ff0000,borderWidth:2px}); 这段代码看上去没有任何问题,但实际上,在setStyle函数内部使用参数_style为element.style赋值时,如果element原先已经有了一定的样式,例如曾经执行过: element.style.height="20px"; 而_style中却没有包括对height的定义,因此element的height样式就丢失了,不是最初所要的结果。要解决这个问题,可以用反射机制来重写setStyle函数:
代码如下: function setStyle(_style){ //得到要改变样式的界面对象 var element=getElement(); for(var p in _style){ element.style[p]=_style[p]; } }
程序中遍历_style的每个属性,得到属性名称,然后再使用方括号语法将element.style中的对应的属性赋值为_style中的相应属性的值。从而,element中仅改变指定的样式,而其他样式不会改变,得到了所要的结果。^-^
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 javascript对象有哪些 的文章

 

随机推荐