某人初學javascript的時候寫的學習筆記

來源:互聯網
上載者:User

複製代碼 代碼如下:/*
* JavaScript對象就是一組屬性(方法)的集合
* 在該語言中如果變數名或方法名不符合聲明規範,
* 則一定得用方括弧“ [] ”引用它
*
*/
/**
* <1.>該語句聲明了一個class1類,class1相當於構造方法,又叫構造器
* 也可說聲明了一個class1方法
*/
function class1(){
this.name="xjl"; //給對象添加屬性
this.say= function(){alert("大家好!");}; //給對象添加方法
};
/**
* <2.>建立執行個體用 new 關鍵字,new 操作符不僅對內部類有效,對使用者定義的類也是同樣的用法
* 每個對象可以看作是多個屬性(方法)的集合,即 對象名.屬性(方法)名 或 對象名[“屬性(方法)名”]
* 方括弧 '[]' 適合不確定具體要引用哪個屬性(方法)的場合
*/
var a = new class1();
//alert(typeof(a)); //typeof(a) 返回a的類型
//alert(a.name); //每個對象可以看作是多個屬性(方法)的集合,
//alert(a['name']); //用方括弧([])引用對象的屬性和方法
//下拉框對象名[下拉框對象.value] 即可獲得使用者所選的值 也可用 eval(“下拉框對象名.”+下拉框對象.value);
//a.say(); //調用對象的方法
//var arr=new Array();
//arr['push']('abc'); //為數組添加一個元素,其中的 push 為內建的屬性
//arr['push']('1234'); //為數組添加一個元素
//alert(arr);
/**
* <二.>動態添加、修改、刪除對象的屬性和方法
*
*/
var obj = new Object();
//添加屬性……其中的屬性名稱可任意取
obj.name="徐建龍";
obj.sex = '男';
obj['my name'] = "xujianlong"; //使用方括弧 “ [] ”可以使用非標識符字串作為屬性名稱
//添加方法……方法名也可任意取,也可傳參數
obj.alert = function(a){
alert(a+"你好!");
}
//修改屬性,就是把屬性的值改成別的內容
obj.name = "張三";
obj['name'] = 'anme';
//刪除屬性,就是把屬性的值改成 undefined 或 null
obj.name = 'undefined';
/**
* <三>使用大括弧({})文法建立無類型對象
*/
//在大括弧中方屬性和方法,屬性與屬性用逗號隔開,屬性與值之間用冒號隔開
var ob = {
name:"123",
say:function(){alert("123")} //最後一個屬性或方法不用逗號
}
//也可用如下方法定義對象的屬性和方法
var ob1 = {"name":'123','say':function(){alert("abcd");}};
/**
*<四>prototype原型對象
* 所有的函數(function)對應的類是(Function)
* prototype 實際上就是表示了一個類的成員的集合。
* *當通過new 來擷取一個類的對象時,prototype 對象的成員都會成為執行個體化對象的成員。
*/
function class2(){ //建立一個對象
}
var ob2 = new class2();
class2.prototype.me = function(){alert("123");} //在prototype的前面是,你所建立的類名
class2.prototype.name = "123"; //
/**
* 函數對象和其他內部對象的關係
*/
//typeof(new Function()),typeof(Function),typeof(Array),typeof(Object) 返回字串“function”這些參數稱之為構造器
//typeof(new Date()),typeof(new Array()),typeof(new Object()) 返回字串“object”
/**
* 傳遞給函數的隱含參數:arguments,它具有數組的特點,但它不是數組,可用下標來訪問它
*/
//arguments 中包含了一個參數 callee, 它表示對 函數對象本身的引用,如下:
var sum=function(n){
if(1==n)
return 1;
else
return n+arguments.callee(n-1);
}
//該語句表示聲明一個 namespace1 的命名空間 ,如下:
var namespace1 = new Object();
namespace1.class1 = function(){alert("123");};
var obj1=new namespace1.class1(); //頁面載入時就執行
/**
* 使用prototype 對象定義類成員
*/
//在建立執行個體的語句之後使用函數的prototype屬性給類定義新成員,只會對後面建立的對象有效
//在prototype中的constructor()方法 ,相當於構造方法
function class1(){
//alert('adf');
}
//class1.prototype.constructor(); //頁面載入時就執行
//用prototype 定義的簡化
class1.prototype={
//放入一些屬性或方法
//多個屬性或方法是用逗號(,)隔開
}
//如下代碼即是 靜態方法和屬性
class1.name="abc";
class1.say = function(){/*codes*/}
//利用反射機制,可以改變 element 中指定的樣式,而其他樣式不會改變,得到了所要的結果,例如:
function setStyle(_style){
//得到要改變樣式的介面對象
var element=getElement();
for(var p in _style){
element.style[p]=_style[p];
}
}
//可以通過拷貝一個類的 prototype 到另外一個類來實現繼承,但有缺陷。例如:
// function class4(){}
//
// function class2(){
//
//
// class2.prototype=class4.prototype; //實現的繼承
// class2.prototype.f = function(){alert("a");}
//
//當對class2 進行prototype 的改變時,class4 的prototype 也隨之改變
// instanceof 操作符來判斷一個對象是否是某個類的執行個體, 例如:
var a = new class2();
a instanceof class2; //返回一個 bool ,如果 a 的class2 中的繼承類,則也是 true
//一種更好的繼承
for(var p in class1.prototype){
class2.prototype[p]=class1.prototype[p];
}
class2.prototype.ma=function(){
alert(123);
}
//當對class2 進行prototype 的改變時,class4 的prototype 不會改變
/**
* prototype-1.3.1架構中的類繼承實現機制
*/
//-------------------------------------------------------------------------------------------
//該語句為每個對象天加一個extend 方法,代碼如下;
Object.extend = function(destination, source) {
for (property in source) {
destination[property] = source[property]; //將source中所有的屬性或方法都賦值給destination
}
return destination;
}
//通過Object類為每個對象添加方法extend
Object.prototype.extend = function(object) {
return Object.extend.apply(this, [this, object]);
}
Object.extend.apply(this,[this,object]);
//class1繼承與class2 ,好處是 通過new class2()相當於把class2的prototype的副本賦給class1
//在class1中的prototype的改變,不會影響class2中的prototyp
class1.prototype=(new class2()).extend({/*class1要增加的屬性或方法*/});
/**
* 只做了一個聲明而未實現的方法,具有虛函數的類就稱之抽象類別 ,抽象類別是不能執行個體化的
*/
//裡虛方法不需經過聲明,而直接使用了。這些方法將在衍生類別中實現,例如:
function c1(){}
c2.prototype={
fun:function(){ this.fn();}//其中的fn方法未定義
}
function c2(){}
c1.prototype=(new c2()).extend({
fn:function(){var x = 1;}
});
//this.initialize.apply(this, arguments);該語句是把建立對象時的參數傳給initialize方法
/***
* 在javascript中也可以用 try-catch-finally 語句用於捕獲異常或錯誤資訊
* 其中在catch(e)的小括弧中的e 是必須的 e是一個名為error 的對象
* e=new Error(message)來建立這個對象,異常的描述被作為error 對象的一個屬性message,
*/
//該代碼示範了異常的拋出
function s(a,b){
try{
if(b==0)
throw new Error("除數不能為零!........");
else
alert(a/b)
}catch(e){
document.write(e.message);///通過message 獲得Error中的實參
}
}
onlaod=s(1,0);
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.