1、 Function對象
Javascript沒有重載的概念每個對象隱含 arguments對象(實際接收的參數),length屬性接收對象期望的參數個,arguments.length,表示實際接收參數個數 ;
var add =function(number){alert(number);};
等價於 var add= new Function(“number”, “alert(number)”);// 最後一個參數表示函數體
等價於 function add(number){alert(number)};
因為是對象的引用,多個同名函數會被最後一個覆蓋,與參數個數無關
2、 資料類型:Undefined(undefined)、Null(null)、Number(number)、String(string)、Boolean(true/false)共5種未經處理資料類型var s = “a”; alert(typeof s) return 'string'
typeof 傳回值 'undefined'、'object、'number'、'string'、'boolean'
javascript 如果聲明的函數沒有傳回值或return,那麼返回undefined—undefined是從null派生出來的
強制類型轉換:只有三種 Boolean(value), String(value),Number(value):數字轉換錯誤return NaN,未定義不可以轉換,Boolean沒什麼用,不建議使用。
3、 Javascript 可以動態添加、刪除屬性
Object obj = new Object();
obj.username = “zhangsan”;// obj[“usernam”]= “zhangsan”;
delete obj.username;//
var object = {username: “zhangsan”, password: “lisi”,gender:function(){…}}//最常見的定義對象的方式,屬性用逗號隔開
4、 數組
var array = new Array();
array.push(1);
array.length
// var array = [1, 3, 23];// 更常用
Arrays.sort(array);// 1,23,3,先轉換成字元,按字串升序排序,顯然不可靠,一般自訂排序
類似java
function compare (num1, num2)
{
varnum1 = parseInt(num1);
varnum2 = parseInt(num2);
if(num1 < num2) return -1;
elseif(num1 > num2) return 1;
else return 0;
}
Var array = [1, 3, 25];
array.sort(compare);// 函數名是對象的引用
arrayà [1 3 25]
5、 建立對象的方式(Javascript只有對象的概念)
A: // 1: 基於已有的對象進行擴充
var object = {username: “zhangsan”, password: “lisi”,gender:function(){…}}//最常見的定義對象的方式,屬性用逗號隔開
--------------------------------------------------------------------------
var object = newObject();//比較適合臨時建立的對象
object.name ="zhangsan";
object.password ="123";
object.sayName =function(name)
{
this.name =name;
alert(this.name);
}
object.sayName("lisi");
B: // 2: Factory 方法
function createObject(name, password)
{
var object = newObject();
object.name =name;
object.password= password;
/*
object.get =function()
{
alert(this.name+ ", " + this.password);
}
*/
object.get =get;// 推薦.屬性專屬,方法共用
return object;
}
function get()
{
alert(this.name+ ", " + this.password);
}
var obj1 =createObject("zhangsan", "123");
obj1.get();
var obj2 =createObject("wanger", "3434");
obj2.get();
C:// 3: 建構函式方式
function Person(name,password)
{
this.name =name;
this.password =password;
this.getInfo =function()
{
alert(this.name+ ", " + this.password);
}
// 隱含產生的對象
}
var p = newPerson("zhangsan", "wanger");
p.getInfo();
D // 4: 使用原型方式(prototype); 屬性值必須在對象產生之後賦值;屬性引用方式(值改變)和Java是一樣的;屬性會被其他對象共用,該變屬性,其他對象可以能發生改變,如果是參考型別的話,常量類型的則不會發生改變
function Student(){}
Student.prototype.name= "zhangsan";
Student.prototype.password= "lkjldjfl";
Student.prototype.getInfo= function()
{
alert(this.name+ ", " + this.password);
}
var s1 = newStudent();
s1.getInfo();
E:// 5: 使用原型 + 建構函式定義對象(實現:屬性不共用,方法共用)
function Person()
{
this.name = new Array();
this.password ="123";// 定義的時候記得初始化
}
Person.prototype.getInfo = function()
{
alert(this.name +", " + this.password);
}
var p1 = new Person();
var p2 = new Person();
p1.name.push("張三");
p2.name.push("裡斯");
p1.getInfo();
p2.getInfo();
6、 對象的繼承inheritance
// javascript 繼承:1、對象冒充
function Parent(name)
{
this.name =name;
this.sayName =function()
{
alert(this.name);
}
}
function Sun(name,age)
{
this.method = Parent;// 此種方式在prototype定義的方法不能被繼承,不推薦使用
this.method(name);
delete this.method;
this.age = age;
this.sayAge =function()
{
alert(this.age);
}
}
var p = new Parent("zhangsan");
var s = new Sun("lisi", 20);
p.sayName();
s.sayName();
s.sayAge();
第二種方式:// call 方法是Function 對象中的方法,因此我們定義的每一個函數都有call方法,call方法第一個參數會被傳遞給函數中的this,從第二個參數開始,會依次傳遞給函數(調用者)中的參數
/** test call 的使用者
function test(str1,str2)
{
alert(this.name+ ", " + str1 + ", " + str2)
}
var object = newObject();
object.name ="zhangsan";
object.arg1 = 30;
test.call(object, "aa", 20);
*/
// 使用call實現inheritance
function Daughter(name, gender)
{
Parent.call(this,name);
this.gender =gender;
this.getInfo =function()
{
alert(this.gender);
}
}
//test code
var d = new Daughter("Rose",27);
d.sayName()
d.getInfo();
第三種// 使用apply 實現 inheritance ,類似call
functionDaughter2(name, gender)
{
Parent.apply(this, new Array(name,...));//[name],採用數組傳遞參數,而call采//用離散的方式
this.gender =gender;
this.getInfo =function()
{
alert(this.gender);
}
}
var d2 = newDaughter2("Rose2", 37);
d2.sayName()
d2.getInfo();
第四種// 使用原型鏈 實現混合方式繼承 推薦
function Parent2(name)
{
this.name =name;
}
Parent2.prototype.sayName= function()
{
alert(this.name);
}
function Sun2(name,age)
{
Parent2.call(this,name);// 實現屬性繼承
this.age = age;
}
Sun2.prototype = new Parent2(); // 繼承父物件的原型
Sun2.prototype.sayAge= function()
{
alert(this.age);
}
// Test code
var sun2 = newSun2("王二", 100);
sun2.sayName();
sun2.sayAge();
7、 Firebug技巧:
function showLog(msg)
{
console.log(msg);
console.info(msg);
console.warn(msg);
console.error(msg);
console.debug(msg);
}
function test(name)
{
showlog(name);
}
showlog(“test”);
8、