zccst筆記
一、物件導向初步
工廠方法
function createperson(name,***)
p.show*** = function()
//3return p;
}p1 = createperson('blue','male');
p2 = createperson('leo','female');
缺點:1,沒有new。
2,每個物件都有一套自己的函式——浪費資源 解決:使用原型
alert(p1.showname == p2.showname);//false
真正的面相物件
//例如
function createperson(name,***)
createperson.prototype.showname = function()
createperson.prototype.show*** = function()
alert(p1.showname == p2.showname);//true
//再例如:
var arr1 = new array(1,2,3,4);
var arr2 = new array(1,2,3,4,5);
array.prototype.sum = function()
return ret;
}alert(arr1.sum());
alert(arr2.sum());
string.prototype.trim = function()
需要注意的幾點:
1,建構函式就是類,類就是建構函式
echo typeof date; //function
function() show
var show = function()
//實際上是
var show = new function("alert('abc')");//alert(typeof show);//function
typeof array,date//都是function
typeof array(), date()//都是object
alert(typeof array);//function
console.log(array); //[undefined]
alert(typeof date); //function
console.log(date); //date()
alert(typeof array());//object
console.log(array()); //
alert(typeof date()); //string
console.log(date()); //mon nov 26 2012 18:45:27 gmt+0800
alert(typeof (new array()));//object
console.log(new array()); //
alert(typeof (new date())); //object
console.log(new date()); //date
alert(typeof math);//function
console.log(math); //math {}
2,原型優先順序(可模擬css的行間樣式和class)
array.prototype.a = 12;
var arr = [1,2,3];
alert(arr.a); //12
arr.a = 5;
alert(arr.a); //5
delete arr.a;
alert(arr.a); //12
二、容易錯亂的this
this關鍵字
在兩種情況下回引起錯亂:定時器和事件中。
【北風版】解釋:內部函式中的this是全域性window。外部函式的this是當前函式域。
var box =
};//alert(box.getuser());
var box = }};
//alert(box.getuser()());
//內部函式中的this是全域性window。外部函式的this是當前函式域。
//解決辦法一:使用_this。
var box = }};
alert(box.getuser()());
//解決辦法二:使用call
alert(box.getuser().call(box));
1,定時器
原因:定時器是全域性變數
function aaa(),1000);
}aaa.prototype.show = function()
var obj = new aaa();
obj.show();
2,事件中
原因:物件和dom物件混在一起
解決辦法:
var _this = this;
this.xx = function()
例項
function bbb()
}bb.prototype.show = function()
window.onload = function()
三、繼承
js繼承通過call
function person(name,***)
person.prototype.showname = function()
person.prototype.show*** = function()
function worker(name,***,job)
//通過原型繼承父類的方法。原型鏈
worker.prototype = person.prototype;
//是引用。對worker的修改影響了person的方法。換成
for(var i in person.prototype)
worker.prototype.showjob = function()
var om1 = new worker('blue','男', '打雜的');
om1.showjob();
總結:建構函式偽裝:繼承父類的屬性
通過原型鏈:繼承父類方法
需要注意的幾點:
1,引用
本質就是指向同一塊區域。js所有物件全是引用。
var arr1 = [1,2,3];
var arr2 = arr1;
arr2.push(4);
alert(arr1);
alert(arr2);
//解決辦法之一:通過for迴圈
2,instanceof
var arr1 = new array();
alert(arr1 instanceof object); //true
alert(arr1 instanceof array); //true
alert(arr1 instanceof function); //false
alert(arr1 instanceof date); //false
alert(typeof arr1); //object
四、js系統物件
1,宿主物件(由瀏覽器提供)
主要是document和widow。
2,本地物件(非靜態物件)
var arr = new array(); //正常
常見:object, function, array, string, boolean, number, date, regexp, error
3,內建物件(靜態物件)
var omath = new math();//報錯
不需要例項化,可以直接用。比如熟悉函式。
常見:math,global
物件導向 object
object 是所有物件的直接後者間接父類,傳說中的上帝。該類中定義的肯定是所有物件都具備的功能。object類中已經提供了對物件是否相同的比較方法。如果自定義類中也有比較相同的功能,沒有必要重新定義。只要沿襲父類中的功能,建立自己特有比較內容即可。這就是覆蓋。class demo extends ...
物件導向 Object類
一.object類中的equals 方法 equals object obj 指示其它某個物件是否與此物件 相等 返回值型別是boolean oblect類中的equals方法 public boolean equals object obj 姓名和年齡都同樣,為同乙個人 假設要比較兩個人是否為同乙...
c 物件導向程式設計 物件導向
什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...