JavaScript基本概念初級(jí)講解論壇貼的學(xué)習(xí)記錄
更新時(shí)間:2009年02月22日 02:32:45 作者:
JavaScript基本概念 論壇貼建議大家看下,都是一些js的高級(jí)的技巧知識(shí)小結(jié)。
1.關(guān)于this對(duì)象
view plaincopy to clipboardprint?
var obj1=new Object();
var obj2=new Object();
//給兩個(gè)對(duì)象都添加屬性p,并分別等于1和2
obj1.p=1;
obj2.p=2;
//給obj1添加方法,用于顯示p的值
obj1.getP=function(){
alert(this.p); //表面上this指針指向的是obj1
}
//調(diào)用obj1的getP方法,結(jié)果顯示為1
obj1.getP();
//使obj2的getP方法等于obj1的getP方法
obj2.getP=obj1.getP;
//調(diào)用obj2的getP方法,結(jié)果顯示為2
obj2.getP();
var obj1=new Object();
var obj2=new Object();
//給兩個(gè)對(duì)象都添加屬性p,并分別等于1和2
obj1.p=1;
obj2.p=2;
//給obj1添加方法,用于顯示p的值
obj1.getP=function(){
alert(this.p); //表面上this指針指向的是obj1
}
//調(diào)用obj1的getP方法,結(jié)果顯示為1
obj1.getP();
//使obj2的getP方法等于obj1的getP方法
obj2.getP=obj1.getP;
//調(diào)用obj2的getP方法,結(jié)果顯示為2
obj2.getP();
2.關(guān)于函數(shù)對(duì)象
//增加函數(shù)對(duì)象方法method1
Function.prototype.method1=function(){
alert("function1");
}
function func1(a,b,c){
return a+b+c;
}
func1.method1(); //提示:function1
func1.method1.method1(); //提示:function1
//增加對(duì)象方法getType,既包括普通對(duì)象也包括函數(shù)對(duì)象
Object.prototype.getType=function(){
return typeof(this);
}
var array1=new Array();
function func1(a,b){
return a+b;
}
alert(array1.getType()); //提示:object
alert(func1.getType()); //提示:function
//func2作為一個(gè)對(duì)象傳遞給了func1的形參theFunc,再由func1內(nèi)部進(jìn)行theFunc的調(diào)用
function func1(theFunc){
theFunc();
}
function func2(){
alert("ok");
}
func1(func2); //提示:ok
//當(dāng)進(jìn)行函數(shù)調(diào)用時(shí),除了指定的參數(shù)外,還創(chuàng)建一個(gè)隱含的對(duì)象arguments
function func(a,b){
alert(a);
alert(b);
for(var i=0;i<arguments.length;i++){
alert(arguments[i]);
}
}
func(1,2,3); //提示:1,2,3
/*
arguments對(duì)象的另一個(gè)屬性是callee,
它表示對(duì)函數(shù)對(duì)象本身的引用.
這有利于實(shí)現(xiàn)無(wú)名函數(shù)的遞歸或者保證函數(shù)的封裝性.
*/
var sum=function(n){
if(1==n)
return 1;
else
return n+arguments.callee(n-1);
}
alert(sum(100)); //提示:5050
/*
JavaScript為函數(shù)對(duì)象定義了兩個(gè)方法:apply和call.
它們的作用都是將函數(shù)綁定到另外一個(gè)對(duì)象上去運(yùn)行,兩者僅在定義參數(shù)的方式有所區(qū)別:
以下是引用片段:
Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2…]]);
從函數(shù)原型可以看到,第一個(gè)參數(shù)都被取名為thisArg,
即所有函數(shù)內(nèi)部的this指針都會(huì)被賦值為thisArg,
這就實(shí)現(xiàn)了將函數(shù)作為另外一個(gè)對(duì)象的方法運(yùn)行的目的。
兩個(gè)方法除了thisArg參數(shù),都是為Function對(duì)象傳遞的參數(shù)。
*/
//定義一個(gè)函數(shù)func1,具有屬性p和方法A
function func1(){
this.p="func1-";
this.A=function(arg){
alert(this.p+arg);
}
}
//定義一個(gè)函數(shù)func2,具有屬性p和方法B
function func2(){
this.p="func2-";
this.B=function(arg){
alert(this.p+arg);
}
}
var obj1=new func1();
var obj2=new func2();
obj1.A("byA"); //顯示func1-byA
obj2.B("byB"); //顯示func2-byB
obj1.A.apply(obj2,["byA"]); //顯示func2-byA,其中[“byA”]是僅有一個(gè)元素的數(shù)組,下同
obj2.B.apply(obj1,["byB"]); //顯示func1-byB
obj1.A.call(obj2,"byA"); //顯示func2-byA
obj2.B.call(obj1,"byB"); //顯示func1-byB
/*
可以看出,obj1的方法A被綁定到obj2運(yùn)行后,
整個(gè)函數(shù)A的運(yùn)行環(huán)境就轉(zhuǎn)移到了obj2,即this指針指向了obj2。
同樣,obj2的函數(shù)B也可以綁定到obj1對(duì)象去運(yùn)行。
代碼的最后4行顯示了apply和call函數(shù)參數(shù)形式的區(qū)別。
*/
/*
與arguments的length屬性不同,
函數(shù)對(duì)象還有一個(gè)屬性length,
它表示函數(shù)定義時(shí)所指定參數(shù)的個(gè)數(shù),
而非調(diào)用時(shí)實(shí)際傳遞的參數(shù)個(gè)數(shù)
*/
function sum(a,b){
return a+b;
}
alert(sum.length);
復(fù)制代碼 代碼如下:
view plaincopy to clipboardprint?
var obj1=new Object();
var obj2=new Object();
//給兩個(gè)對(duì)象都添加屬性p,并分別等于1和2
obj1.p=1;
obj2.p=2;
//給obj1添加方法,用于顯示p的值
obj1.getP=function(){
alert(this.p); //表面上this指針指向的是obj1
}
//調(diào)用obj1的getP方法,結(jié)果顯示為1
obj1.getP();
//使obj2的getP方法等于obj1的getP方法
obj2.getP=obj1.getP;
//調(diào)用obj2的getP方法,結(jié)果顯示為2
obj2.getP();
var obj1=new Object();
var obj2=new Object();
//給兩個(gè)對(duì)象都添加屬性p,并分別等于1和2
obj1.p=1;
obj2.p=2;
//給obj1添加方法,用于顯示p的值
obj1.getP=function(){
alert(this.p); //表面上this指針指向的是obj1
}
//調(diào)用obj1的getP方法,結(jié)果顯示為1
obj1.getP();
//使obj2的getP方法等于obj1的getP方法
obj2.getP=obj1.getP;
//調(diào)用obj2的getP方法,結(jié)果顯示為2
obj2.getP();
2.關(guān)于函數(shù)對(duì)象
復(fù)制代碼 代碼如下:
//增加函數(shù)對(duì)象方法method1
Function.prototype.method1=function(){
alert("function1");
}
function func1(a,b,c){
return a+b+c;
}
func1.method1(); //提示:function1
func1.method1.method1(); //提示:function1
//增加對(duì)象方法getType,既包括普通對(duì)象也包括函數(shù)對(duì)象
Object.prototype.getType=function(){
return typeof(this);
}
var array1=new Array();
function func1(a,b){
return a+b;
}
alert(array1.getType()); //提示:object
alert(func1.getType()); //提示:function
//func2作為一個(gè)對(duì)象傳遞給了func1的形參theFunc,再由func1內(nèi)部進(jìn)行theFunc的調(diào)用
function func1(theFunc){
theFunc();
}
function func2(){
alert("ok");
}
func1(func2); //提示:ok
//當(dāng)進(jìn)行函數(shù)調(diào)用時(shí),除了指定的參數(shù)外,還創(chuàng)建一個(gè)隱含的對(duì)象arguments
function func(a,b){
alert(a);
alert(b);
for(var i=0;i<arguments.length;i++){
alert(arguments[i]);
}
}
func(1,2,3); //提示:1,2,3
/*
arguments對(duì)象的另一個(gè)屬性是callee,
它表示對(duì)函數(shù)對(duì)象本身的引用.
這有利于實(shí)現(xiàn)無(wú)名函數(shù)的遞歸或者保證函數(shù)的封裝性.
*/
var sum=function(n){
if(1==n)
return 1;
else
return n+arguments.callee(n-1);
}
alert(sum(100)); //提示:5050
/*
JavaScript為函數(shù)對(duì)象定義了兩個(gè)方法:apply和call.
它們的作用都是將函數(shù)綁定到另外一個(gè)對(duì)象上去運(yùn)行,兩者僅在定義參數(shù)的方式有所區(qū)別:
以下是引用片段:
Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2…]]);
從函數(shù)原型可以看到,第一個(gè)參數(shù)都被取名為thisArg,
即所有函數(shù)內(nèi)部的this指針都會(huì)被賦值為thisArg,
這就實(shí)現(xiàn)了將函數(shù)作為另外一個(gè)對(duì)象的方法運(yùn)行的目的。
兩個(gè)方法除了thisArg參數(shù),都是為Function對(duì)象傳遞的參數(shù)。
*/
//定義一個(gè)函數(shù)func1,具有屬性p和方法A
function func1(){
this.p="func1-";
this.A=function(arg){
alert(this.p+arg);
}
}
//定義一個(gè)函數(shù)func2,具有屬性p和方法B
function func2(){
this.p="func2-";
this.B=function(arg){
alert(this.p+arg);
}
}
var obj1=new func1();
var obj2=new func2();
obj1.A("byA"); //顯示func1-byA
obj2.B("byB"); //顯示func2-byB
obj1.A.apply(obj2,["byA"]); //顯示func2-byA,其中[“byA”]是僅有一個(gè)元素的數(shù)組,下同
obj2.B.apply(obj1,["byB"]); //顯示func1-byB
obj1.A.call(obj2,"byA"); //顯示func2-byA
obj2.B.call(obj1,"byB"); //顯示func1-byB
/*
可以看出,obj1的方法A被綁定到obj2運(yùn)行后,
整個(gè)函數(shù)A的運(yùn)行環(huán)境就轉(zhuǎn)移到了obj2,即this指針指向了obj2。
同樣,obj2的函數(shù)B也可以綁定到obj1對(duì)象去運(yùn)行。
代碼的最后4行顯示了apply和call函數(shù)參數(shù)形式的區(qū)別。
*/
/*
與arguments的length屬性不同,
函數(shù)對(duì)象還有一個(gè)屬性length,
它表示函數(shù)定義時(shí)所指定參數(shù)的個(gè)數(shù),
而非調(diào)用時(shí)實(shí)際傳遞的參數(shù)個(gè)數(shù)
*/
function sum(a,b){
return a+b;
}
alert(sum.length);
您可能感興趣的文章:
- javascript,jquery閉包概念分析
- JavaScript內(nèi)核之基本概念
- javascript學(xué)習(xí)筆記(二) js一些基本概念
- JavaScript回調(diào)(callback)函數(shù)概念自我理解及示例
- JavaScript的作用域和塊級(jí)作用域概念理解
- JavaScript 基本概念
- javascript中幾個(gè)容易混淆的概念總結(jié)
- javascript相關(guān)事件的幾個(gè)概念
- 通過(guò)實(shí)例理解javascript中沒(méi)有函數(shù)重載的概念
- 深入理解JavaScript編程中的原型概念
- 深入剖析JavaScript編程中的對(duì)象概念
- 帶領(lǐng)大家學(xué)習(xí)javascript基礎(chǔ)篇(一)之基本概念
相關(guān)文章
js基本算法:冒泡排序,二分查找的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇js基本算法:冒泡排序,二分查找的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-1010分鐘徹底搞懂Http的強(qiáng)制緩存和協(xié)商緩存(小結(jié))
這篇文章主要介紹了10分鐘徹底搞懂Http的強(qiáng)制緩存和協(xié)商緩存(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08javascript的日期對(duì)象、數(shù)組對(duì)象、二維數(shù)組使用說(shuō)明
這篇文章主要介紹了javascript的日期對(duì)象、數(shù)組對(duì)象、二維數(shù)組使用說(shuō)明,需要的朋友可以參考下2014-12-12Javascript基礎(chǔ)教程之while語(yǔ)句
這篇文章主要介紹了Javascript基礎(chǔ)教程之while語(yǔ)句的相關(guān)資料,需要的朋友可以參考下2015-01-01服務(wù)端 VBScript 與 JScript 幾個(gè)相同特性的寫法 By shawl.qiu
服務(wù)端 VBScript 與 JScript 幾個(gè)相同特性的寫法 By shawl.qiu...2007-03-03window.onload和$(function(){})的區(qū)別介紹
window.onload和$(function(){})有什么區(qū)別。window.onload表示頁(yè)面加載完了后(包括dom和js),再執(zhí)行函數(shù)里面的內(nèi)容,感興趣的朋友可以了解下2013-10-10