js高級


js高級
0級dom事件
<input type=button onclick="alert(js代碼)"
這樣其實生成了一個function onclick(event)方法把其中js包起來了
0級dom事件
.onclick=function(){
alert("one");
}
經過標籤選擇到dom元素,因此要放在標籤加載以後
執行,一個是放到哦onload裏面一個是放到尾巴

2級dom事件
.addeventlistener("click",function(){
alert("one");
})
.addeventlistener("click",function(){
alert("two");
})
綁多個事件不會覆蓋,冒泡和捕獲,先捕獲後冒泡



5種基本數據類型
undefined\null\boolean\number\string
變量建立未賦值,undefined有一個值就是undefined
null 空對象指針沒有值
var foxmale=true;//boolean布爾值
var foxage=123 ;//js中不分浮點整形不拉不拉,所有都是number
var foxnam="小二黑";字符串string
值類型
1種複雜類型
object
var fox=new object();//建立對象
fox.age=18;//fox["age"]=18;同樣的效果可是 []的優勢是能夠經過
變量來動態訪問屬性

delete fox.age;//實用delete關鍵字刪除自定義屬性
// JSON.stringify(fox);把對象轉成json格式
JSON.parse() 把json轉成對象
eval//將json格式字符串轉成js對象,可是要注意兩邊
加上"()";
//eval方法能夠動態執行js代碼
能夠把字符串轉換成js代碼,在調用的位置執行
js引擎,碰到了eval方法,就會解析裏面的字符串,在調用的位置
把js方法放進去。像是一個自定義click事件



//檢查數據類型typeof運算符
alert(typeof fxnam);
//--值類型不能動態添加屬性
var foxname="bigying";
var foxname1= foxname.concat("erdan");
alert(foxname1);
瀏覽器乾的事
var foxname=new string("bigying");
var foxname1=foxnam.concat("erdan");
foxname1.tostring();
alert(foxname1);

包裝對象三大包裝對象
var mstring =new string ();//string包裝對象
var mnum=new number();
var bbool=new boolean();


string 包裝對象的經常使用方法
.trim();
.slice()分割
.split()

數組是object包裝對象
push往原數組尾部添加新的元素,返回長度
pop 尾部元素刪掉,返回刪掉的元素
unshift:頭部追加新元素,返回長度
shift:頭部刪除元素,返回刪除的那個元素
<script type="text/javascript">
var numArr = [];
numArr.push(1);
numArr.push(2);
numArr.push(3);
numArr.push(4);
alert(numArr);
//先進先出---隊列
var numStr = "";
//注意:數組長度在變
for (var i = 0; i < 4; i++) {
numStr += numArr.shift();
}
//alert(numStr);
//後進先出---堆棧
for (var i = 0; i < 4; i++) {
numStr += numArr.pop();
}
alert(numStr);
</script>


function函數
//聲明式函數
function sayhi(){}
//函數表達式(匿名)
var sayhi2=function(){}

瀏覽器會優先加載聲明式函數,保證在任何位置均可以調用的到
函數表達式,執行到函數表達式纔會擁有這個函數變量

-------------函數類型
var water=new function("name","age","alert()");
water("bigying",18);


-------------arguments是方法的局部變量保存了傳入的實參
function eatfood(){
arguments[0]......
}
用於模擬實現方法的重載。。。。因此js中定義方法
不必定義形參,由於根本木有用。
若是須要判斷傳入的參數類型,須要配合typeof

-------------獲取函數自己----------------------
arguments.callee 能夠獲取函數自己
function jiechengnum(num){
if(num<=1)
{
return 1;
}
else{
//優化,在內部經過這個調用自身,
避免了在外面被改變覆蓋
return num*arguments.callee(num-1);
}
}


--------------this----------
方法中的this是能夠動態改變的
實用方法對象的.call調用()第一個參數是但願改變的this
sayhi.call(對象,參數)
this就不是誰點就是誰,而是第一個參數的
區別是參數是數組
.apply(對象,[參數])

-------------length------
函數對象的length屬性能夠獲取定義形參個數
-------------工廠--------
function Createpeople(name,age)
{
var c=new object();
c.name=name;
c.age=age;
return c;
}
-------------構造函數模式----
function People(name,age,mehtod)
{
this.name=name;
this.age=age;
this.method=method;
}
var people1=new people("bigying",24,function(){"alert
(bigying)"});//構造函數模式----
var people2=new people("bigying",24,function(){"alert
(bigying)"});//構造函數模式----
此時兩個對象的method方法不和c#同樣在一個方發表。
而是在各自地址
-------------原型模式------------像公共父類同樣
此時用原形來提起公共屬性吧共有的屬性提到方法的原型中
實用構造函數建立的對象,都共享原型裏面的屬性
function People(name,age)
{
this.name=name;
this.age=age;
}
//存進去method到people的prototype裏
people.prototype.method =function(){alert (123);};
var people1=new people("bigying",24);
var people2=new people("erdan",24);
people1.method


-------------繼承-----------
function dog(name,age){
this.name=name;
this.age=age;
}
var dog1 =new dog("牧羊犬",10);
function smalldog(name,age,milk)
{
dog.call(this,name,age);//這裏用call改變了this指向,原本是誰
點就是誰,此處應該是dog的,可是call了以後,this變成了第一個參數的對
象,這裏就是smalldog1,所以dog裏面的構造函數的this發生了改變,這樣就
實現了繼承
this.milk=milk;
}
var smalldog1=new smalldog("茶犬",0.1,"三鹿");javascript

-------------做用域---------

function setName(o)
{
o.name = "lihong";//對應到了c
o = new Object();//新的對象指向新的地址
o.name = "james";//給新對象的name屬性
局部的,結束以後幹掉了
}
var c = new Object();
setName(c);
alert(c.name);

----------------沒有塊級做用域
//以方法爲單位的做用域,出了方法失效

---------------閉包跟做用域鏈-----
指有權能夠訪問另一個函數內部的局部變量,這就是閉包
延長局部變量的生命週期
實際運用,window.onload中的局部變量方法能夠屢次調用java

相關文章
相關標籤/搜索