- 1.常用數(shù)據(jù)類型:
NunnberStringArrayDate - 2.強制類型轉換方式 :
var a = "10";
var result = (Nunber) a + 1;
//可以將字符串開頭的幾個數(shù)字轉成int
var b = "12px";
parseInt(b)==>12
- 3.關于boolean類型
在js中NaNunderfined0這三個是數(shù)是false以外,其他的都是true。 - 4.對象
function Person(name, age){
//聲明屬性必須要用this
this.name = name;
this.age = age;
}
//對類屬性的調用可以通過對象點出來
var p1 = new Person("張三",12);
var name = p1.name
//或者對象["類屬性名稱"]
var age = pr["age"]
function fn(){
alert("彈出框");
return "100";
}
//將y變量指向整個函數(shù)fn,可以 通過x()來調用函數(shù)。
var x = fn;
//此時代表的是調用函數(shù)fn,并將它的返回值賦給y。
var y= fn();
var array = new Array(4, 11, 24, "5");
//刪除下標為2的后面的1個元素 并在刪除位置插入99,22兩個元素
array.splice(2,1,99,22); //-->輸入結果為:4,11,99,22,5
- 5.函數(shù)
//函數(shù)的參數(shù)和調用沒有關系,如果函數(shù)只有一個參數(shù),但是卻傳入了兩個參數(shù),僅僅只會匹配一個,所以JS中函數(shù)不存在重載,后面定義的函數(shù)會覆蓋前面定義的
function fn(num1,num2,){
reutrn num1 + num2 + 1;
}
//調用返回 3
alert(fn(1,1,2));
function fn(num1){
reutrn num1 + 1;
}
//調用返回 2
alert(fn(1,1,2));
//出了常用的定義類型,還可如下定義方式:
var fn1 = new Funcion("num1","num2","alert('結果:'+(num1+num2))");
fn1(11,22);//==>33
//-----------------------------------------華麗分割線---------------------------------------
//函數(shù)可以通過參數(shù)的方式傳入
function callFun(fun,arg){
return fun(arg);
}
function say(arg){
alert("Heool "+arg);
}
callFun(say,"張三");
//也可以通過返回值的方式返回
function fn1(num){
var fn2 = function (arg){
return num + arg;
}
return fn2;
}
var fn3 = fn1(100);
alert(fn3(1));//==>101
//-----------------------------------------華麗分割線---------------------------------------
//arguments關鍵字,可以通過該關鍵字獲取相應屬性的參數(shù)值,這個屬性是一個數(shù)組,其實就是傳遞進來的參數(shù)
//arguments這個對象中有一個callee方法,可以反向調用函數(shù),實現(xiàn)函數(shù)名的解耦合
function fn1(num){
if(num <= 1) return 1;
else return num * arguments.callee(num - 1);
}
//this: this關鍵字在調用時候回根據(jù)不同的對象變得不同
var name= "張三";
function hello(){
alert(this.name+ "說:你好!");
}
function Person(name){
this.name=name;
this.hello=hello;
}
var p = new Person("李四");
//此時調用者是Person
p.hello();//==>李四說:你好!
//此時的調用者是window
hello();//==>張三說:你好!
- 6.原型
//以下方式將會重寫原型,由于原型重寫,而且沒有通過Person.prototype來指定,此時的constructor不會
//再指向Person而是指向Object,如果constructor真的比較重要,可以在json中說明原型的指向
Person.prototype = {
constructor:Person,//手動制定constructor
name: "張三",
age: 22,
say: function(){
aler(thsi.name+"," + this.age);
}
}

原型理解
動態(tài)原型
function Person(name,age,friends){
this.name = name;
this.age = age;
this.friedns = friends;
//判斷Person.protorype.say是否存在,如果不存在則創(chuàng)建
if(!Person.protorye.say){
Person.protorye.say = function(){
alert(this.name + "[" + this.friends + "]");
}
}
}
繼承
//基于原型鏈的方式實現(xiàn)繼承
function Parent() {
this.pv = "parent";
}
Parent.prototype.showParentValue = function() {
alert(this.pv);
}
function Child() {
this.cv = "child";
}
Child.prototype = new Parent();
Child.prototype.showChildValue = function() {
alert(this.cv);
}
var c = new Child();
c.showChildValue();
c.showParentValue()
//-----------------------------------------華麗分割線---------------------------------------
//在使用原型鏈進行繼承一定要注意以下問題:
//1.不能 在設定了原型鏈之后,再重新為原型鏈賦值
//當執(zhí)行下面的代碼,就意味著Child原型又重寫了,就不存在繼承關系了
Chil.prototype = {
showChildValue = function() {
alert(this.cv);
}
}
//2.一定要再原型賦值之后才能添加或者覆蓋方法
Child.prototype.showChildValue = function(){
alert(this.cv);
}
//如果以上代碼在[Child.prototype = new Parent()]之前執(zhí)行,那么就會繼承之后就會覆蓋該方法。
/**
* 使用原型鏈繼承,最大的確定就是,無法從子類中調用父類的構造函數(shù),這樣就沒辦法把子中的屬性賦值到父類
* 第二個就是,如果父類有引用類型,此時這個引用類會天階島子類的原型中,當?shù)谝粋€對象修改了這個引用之后,其他對象的引用同時修改
*
**/

基于原型鏈的繼承