javascript中的 object 和 function小結(jié)
在學(xué)習(xí)過(guò)傳統(tǒng)的面向?qū)ο笳Z(yǔ)言后,如 java c++,轉(zhuǎn)學(xué) javascript 卻有點(diǎn)不適應(yīng),特別是 javascript 中所謂的 object(對(duì)象) function(函數(shù)),有時(shí)候會(huì)被搞暈。于是乎簡(jiǎn)單整理了下面的一些概念性的東西,方便學(xué)習(xí)和理解,會(huì)結(jié)合一點(diǎn) java面向?qū)ο蟮闹R(shí)加以說(shuō)明。
先了解幾個(gè)概念:
1.首先 Object 在 ECMAScripe 中是指什么,在 ECMAScripe 中有5種簡(jiǎn)單數(shù)據(jù)類型:Undefined,Null,Boolean,Number,String. 還有一種復(fù)雜數(shù)據(jù)類型,那就是Object.
2.引用類型---java中的 類 的概念
引用類型的值 --- java中對(duì)象的概念
3.函數(shù) ---- java 中方法的概念
4.var --- 申明變量的一個(gè)操作符,因?yàn)?js 的變量是松散類型的,所謂松散就是可以用來(lái)保存任何數(shù)據(jù),變量?jī)H僅用來(lái)表示一個(gè)占位符而已,所以變量也不必指定 什么 String ,int ,直接var 就可以了,注意對(duì)象 可以用var 聲明.
5.Object(), 是什么 --- java中 Object 的 構(gòu)造方法 , js 中 Object 的 構(gòu)造函數(shù)。
Object
js 是可以動(dòng)態(tài)的添加屬性和方法的。
比如創(chuàng)建一個(gè) Object 實(shí)例
var obj = new Object();
變量 obj 就是 new Object() 的 對(duì)象。
接下來(lái):
var obj = new Object();
obj.name = 'Zeng';
obj.age = 12;
obj.fun = function () {
console.log(this.name+this.age);
}
但 這樣封裝性不太好,所以比較經(jīng)常使用的是對(duì)象字面量表示法
var obj = {
name:'Zeng',
age:12,
fun:function () {
console.log(this.name+this.age);
}
}
obj.fun(); // 打印出: Zeng12
對(duì)象屬性的訪問(wèn):
1,采用 中括號(hào)
console.log(obj["name"]);
2,采用 點(diǎn) , 建議采用此方式
console.log(obj.name );
function
函數(shù)對(duì)于任何語(yǔ)言來(lái)說(shuō)都是重要的一部分,函數(shù)是 js的叫法,你也可以理解為就是 java 的 方法 ,c 語(yǔ)言的 函數(shù),都一樣的。 不過(guò)在申明和使用上, js 的函數(shù) 可很大不同。
函數(shù)的一個(gè)示例:
function fun() {
return "例子";
}
console.log(fun()); // 輸出 : ‘例子'
還可以這樣:
var fun = function() {
return "使用表達(dá)式創(chuàng)建函數(shù)"
};
console.log(fun()); // 輸出 : "使用表達(dá)式創(chuàng)建函數(shù)"
上面例子你會(huì)注意到函數(shù)沒(méi)有函數(shù)名,只有一個(gè)變量名 fun ,表達(dá)式尾部還有一個(gè) ;分號(hào),
你可以把它當(dāng)作聲明一個(gè)變量的表達(dá)式就好理解了,聲明其它變量是這么寫的:
var name = "Zeng"; // 有變量名 ,還有 分號(hào)
來(lái)一個(gè)帶參數(shù)的例子:
function fun() {
return arguments[0] + arguments[1] + arguments[2];
}
console.log(fun("這是","一個(gè)","例子")); // 輸出 :“這是一個(gè)例子”
是不是有點(diǎn)奇怪,首先我創(chuàng)建的函數(shù)沒(méi)有帶參數(shù)的,在調(diào)用的時(shí)候有給參數(shù),在函數(shù)里面也能獲得參數(shù)并返回。
其實(shí)這里是要說(shuō)明一點(diǎn),js 函數(shù)不介意傳遞進(jìn)來(lái)幾個(gè)參數(shù),也不在乎參數(shù)是什么類型!原因是函數(shù)內(nèi)部接收參數(shù)是用一個(gè)數(shù)組來(lái)儲(chǔ)存的!
數(shù)組也就是 上面的 arguments , 數(shù)組當(dāng)然不介意你傳幾個(gè)參數(shù)進(jìn)來(lái),有參數(shù)我加一,沒(méi)參數(shù)我就是 null 。
咱們可以利用這個(gè)特性做個(gè)例子:
模仿方法的重載--利用參數(shù)個(gè)數(shù)的不同執(zhí)行不同反應(yīng)
function fun() {
if(arguments.length == 1){
return arguments[0]*10;
}
if(arguments.length == 2){
return (arguments[0]+arguments[1])*10;
}
return 10;
}
console.log(fun(11,111)); // 返回 1220 !?。?!
沒(méi)有重載:
上面例子是模仿函數(shù)的重載,為什么要模仿呢,我自己創(chuàng)建幾個(gè)不同參數(shù)的函數(shù)不久可以了。
function fun( num1) {
return "只有一個(gè)參數(shù)的函數(shù)"
}
function fun( num1,num2) {
return "有兩個(gè)參數(shù)的函數(shù)";
}
console.log(fun(11)); // 輸出 “有兩個(gè)參數(shù)的函數(shù)”
明明調(diào)用的是帶一個(gè)參數(shù)的函數(shù),執(zhí)行的確是帶兩個(gè)參數(shù)的函數(shù)。原因:js定義了兩個(gè)相同名字的函數(shù),該名字只屬于后定義的函數(shù)?。?! 所以在 js 中沒(méi)有重載 這一特性。
函數(shù)名是指針:
var fun = function(num1,num2) {
return num1+num2;
};
var new_fun = fun;
fun = null; // 將 函數(shù) 置 null
console.log(new_fun(10,20)); //輸出 :30
console.log(fun(10,20)); //拋出異常 :fun is not a function
可看出盡管 fun = null; 但在此之前 var new_fun = fun; 也就是 指針也指向了 new_fun 了,所以 new_fun () 函數(shù)還能執(zhí)行,并且函數(shù)體沒(méi)有置 null
函數(shù)也可以作為值來(lái)使用:
function add(fun,num) {
return fun(num);
}
function add_10(num) {
return num+10;
}
console.log(add(add_10,200)); // 輸出 : 210
可以這么解釋:
function add( 函數(shù) , 參數(shù) ) {
return 函數(shù) ( 傳遞過(guò)來(lái)的參數(shù) );
}
函數(shù)的 arguments.callee
這是一個(gè)遞歸的示例
function fun(num) {
if(num<=1){
console.log(num );
return 1 ;
}else {
console.log(num );
return num * arguments.callee(num-1);
}
}
console.log(fun(3)); // 輸出 6
- JavaScript中Function函數(shù)與Object對(duì)象的關(guān)系
- 淺談Javascript中Object與Function對(duì)象
- 淺談Javascript中的Function與Object
- 理解Javascript_09_Function與Object
- 驗(yàn)證javascript中Object和Function的關(guān)系的三段簡(jiǎn)單代碼
- javascript Object與Function使用
- JavaScript中Object和Function的關(guān)系小結(jié)
- JavaScript中Function與Object的關(guān)系
相關(guān)文章
Thinkphp模板沒(méi)有解析直接原樣輸出的解決方法
這篇文章主要介紹了Thinkphp模板沒(méi)有解析直接原樣輸出的解決方法,是很多開發(fā)者都遇到的問(wèn)題,非常實(shí)用,需要的朋友可以參考下2014-10-10
微信小程序 拍照或從相冊(cè)選取圖片上傳代碼實(shí)例
這篇文章主要介紹了微信小程序 拍照或從相冊(cè)選取圖片上傳代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
JS基于onclick事件實(shí)現(xiàn)單個(gè)按鈕的編輯與保存功能示例
這篇文章主要介紹了JS基于onclick事件實(shí)現(xiàn)單個(gè)按鈕的編輯與保存功能,結(jié)合實(shí)例形式分析了JS實(shí)現(xiàn)onclick響應(yīng)事件的轉(zhuǎn)換相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
JavaScript ECMA-262-3 深入解析.第三章.this
在這篇文章里,我們將討論跟執(zhí)行上下文直接相關(guān)的更多細(xì)節(jié)。討論的主題就是this關(guān)鍵字2011-09-09
不使用中間變量,交換int型的 a, b兩個(gè)變量的值。
群中的題目,不過(guò)這樣大眾臉的題想必大家都見過(guò),就看能玩出什么新花招2010-10-10
簡(jiǎn)單實(shí)用的反饋表單無(wú)刷新提交帶驗(yàn)證
表單無(wú)刷新提交帶驗(yàn)證,非常適用于反饋,具體的實(shí)現(xiàn)如下包含各個(gè)功能代碼,喜歡的朋友可以參考下2013-11-11

