javascript有類的概念。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、網(wǎng)站制作、林甸網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、林甸網(wǎng)絡(luò)營銷、林甸企業(yè)策劃、林甸品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供林甸建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:chinadenli.net
js里面類通過function進(jìn)行定義,有些類似c++的struct定義。
代碼示例:
function?MyClass(){
this.a?=?'2';
this.show=function(){
alert('1');
}
}
var?myClass?=?new?MyClass();
alert(myClass.a);//獲取屬性
myClass.show();//調(diào)用類方法
首先,對象的定義大致如下:
對象(object)是JavaScript的核心概念,也是最重要的數(shù)據(jù)類型。JavaScript的所有數(shù)據(jù)都可以被視為對象。
簡單說,所謂對象,就是一種無序的數(shù)據(jù)集合,由若干個“鍵值對”(key-value)構(gòu)成。
var o = {
p: "Hello World"
};
上面代碼中,大括號就定義了一個對象,它被賦值給變量o。這個對象內(nèi)部包含一個鍵值對(又稱為“成員”),p是“鍵名”(成員的名稱),字符串“Hello World”是“鍵值”(成員的值)。鍵名與鍵值之間用冒號分隔。如果對象內(nèi)部包含多個鍵值對,每個鍵值對之間用逗號分隔。
我們從兩個層次來理解。
(1)“對象”是單個實(shí)物的抽象。
一本書、一輛汽車、一個人都可以是“對象”,一個數(shù)據(jù)庫、一張網(wǎng)頁、一個與遠(yuǎn)程服務(wù)器的連接也可以是“對象”。當(dāng)實(shí)物被抽象成“對象”,實(shí)物之間的關(guān)系就變成了“對象”之間的關(guān)系,從而就可以模擬現(xiàn)實(shí)情況,針對“對象”進(jìn)行編程。
(2)“對象”是一個容器,封裝了“屬性”(property)和“方法”(method)。
所謂“屬性”,就是對象的狀態(tài);所謂“方法”,就是對象的行為(完成某種任務(wù))。比如,我們可以把動物抽象為animal對象,“屬性”記錄具體是那一種動物,“方法”表示動物的某種行為(奔跑、捕獵、休息等等)。
其次,典型的面向?qū)ο缶幊陶Z言(比如C++和Java),存在“類”(class)這樣一個概念。所謂“類”就是對象的模板,對象就是“類”的實(shí)例。JavaScript語言沒有“類”,而改用構(gòu)造函數(shù)(constructor)作為對象的模板。
前面說過,“對象”是單個實(shí)物的抽象。所以,通常需要一個模板,表示某一類實(shí)物的共同特征,然后“對象”根據(jù)這個模板生成。
所謂“構(gòu)造函數(shù)”,就是專門用來生成“對象”的函數(shù)。它提供模板,作為對象的基本結(jié)構(gòu)。一個構(gòu)造函數(shù),可以生成多個對象,這些對象都有相同的結(jié)構(gòu)。
javascript是一個“基于對象”的編程語言,不是面向?qū)ο蟮木幊陶Z言。
你要知道javascript中的function定義的函數(shù)實(shí)際上就是Function對象實(shí)例。
例如:
function demo(x){
alert(x);
}
實(shí)際上等價于:
Function demo = new Function("x","alert(x)");
所以你如果想要用javascript來模擬面向?qū)ο缶幊蹋ɡ鏙ava的類),那么就可以用function來模擬Class,用function的原型prototype或者嵌套function來模擬類的方法或者屬性。下面給你一個簡單的例子:
//模擬學(xué)生類,可以帶參數(shù),例如initName
function Student(initName){
var name = initName; //模擬學(xué)生類的屬性name
}
Student.prototype.printName = function(){ //定義Student類prototype中的printName函數(shù)
alert(this.name);
}
測試時可以這樣寫:
var student = new Student("張三"); //創(chuàng)建一個“Student對象”,實(shí)際上是一個Function實(shí)例對象
student.printName(); //執(zhí)行student對象的printName函數(shù)
沒有! 不過 類 是什么要看你怎么定義了.js可以模擬類似java的class
每個對象都有個屬性: prototype 就是原型咯 原型也是一個對象而已
js不是通過類來規(guī)范對象的屬性和行為的,而已通過一個對象(原型對象)
* 標(biāo)準(zhǔn)化面向?qū)ο蟮拇a *
---------------------------------------------------------------------------
1.原型式繼承
1) 原理: 對象的構(gòu)造函數(shù)可以從其他對象中繼承方法,它創(chuàng)建出一個原型對象后,所有
其他的新對象都可以基于這個原型對象來構(gòu)建
2) 原型式繼承的設(shè)計適用于單繼承而非多繼承
3) 使用示例:
function Person(name){
this.name = name;
}
Person.prototype.getName = function(){
return this.name;
}
function User(name, password){
this.name = name;
this.password = password;
}
User.prototype = new Person(); //關(guān)鍵代碼!繼承Person對象的所有方法
User.prototype.getPassword = function(){
return this.password;
}
2.類式繼承
Function.prototype.method = function(name, fn){
this.prototype[name] = fn;
return this;
}
Function.method('inherits', function(parent){
var depth = 0;
var proto = this.prototype = new parent();
this.method('uber', function uber(name){
var func, ret, v = parent.prototype;
if(depth){
for(var i=depth; i0; --i){
v = v.constructor.prototype;
}
func = v[name];
}else{
func = proto[name];
if(func == this[name]){
func = v[name];
}
}
++depth;
ret = func.apply(this, Array.prototype.slice.apply(arguments, [1]));
--depth;
return ret;
});
return this;
});
Function.method('swiss', function(parent){
for(var i=1,len=arguments.length; ilen; ++i){
var name=arguments[i];
this.prototype[name] = parent.prototype[name];
}
return this;
});
function Person(name){
this.name = name;
}
Person.method('getName', function(){
return this.name;
});
function User(name, password){
this.name = name;
this.password = password;
}
User.inherits(Person);
User.method('getPassword', function(){
return this.password;
});
User.method('getName', function(){
return 'My name is ' + this.uber('getName');
});
JavaScript 是面向?qū)ο蟮恼Z言,引用數(shù)據(jù)類型都是對象,包括函數(shù)也是對象,同時還可以通過 Object 對象自定義對象。
但是,和其他面向?qū)ο笳Z言(如 Java 等高級語言)比,也有很大差異,JS 中沒有類或接口的概念,即不能直接定義抽象的類,也不能直接實(shí)現(xiàn)繼承。不過,為了編程的方便,我們可以在 JS 中模擬類和繼承的行為。
創(chuàng)建對象實(shí)例或類(雖然沒有類的概念,但是可以把用于創(chuàng)建新對象的對象看作類),可以通過構(gòu)造函數(shù)來實(shí)現(xiàn),構(gòu)造函數(shù)就是具有一系列屬性和行為作為函數(shù)體的函數(shù),可以通過函數(shù)參數(shù)傳入值。它就相當(dāng)于 Java 中類的構(gòu)造函數(shù),需要時可以通過 var instanceObj = new ConstructorFunc(para1,para2,...) 來創(chuàng)建對象(實(shí)例)。
JS 的對象中還有一個重要概念,即原型。每個對象都有原型,原型也是一個對象,可以看做是構(gòu)造函數(shù)的映像,是創(chuàng)建實(shí)例的模型。對象(類)的屬性 prototype 即是對原型對象的引用,創(chuàng)建實(shí)例后,也有屬性 __proto__ 指向原型對象,但該屬性是隱含的。
由于不斷創(chuàng)造新對象(實(shí)例),一級一級的傳遞原型對象,即可構(gòu)成原型鏈。通過原型鏈,即可實(shí)現(xiàn)繼承。首先將父類對象的實(shí)例給子類的原型 ChildCons.prototype = new ParentCons(),再在子類構(gòu)造函數(shù)中調(diào)用父類構(gòu)造函數(shù)將繼承的屬性初始化。繼承的變通方法還有很多,可以參考一些資料。
js里面的類就是一個函數(shù)
跟java、C#、C\C++定義類有很大的區(qū)別
具體的定義一個類可以用下面這種方式
function?student(){
}
上面這個方法定義了一個類(當(dāng)然你也可以說他是定義了一個方法)
可以這樣實(shí)例化這個類的對象
var?stu?=?new?student();
當(dāng)然了,這個類他沒有屬性也沒有自己的方法
下面再定義一個類,他有自己的一個方法
function?student1(){
this.getAge?=?function(){
return?18;
}
}
此時如果實(shí)例化一個student1類的對象,該對象會有一個getAge的方法。
接著定義一個類,有自己的初始化操作(相當(dāng)于類構(gòu)造函數(shù)里面的代碼)
function?student2(){
var?age?=?0;
age?=?18;????????//這句代碼和上面那句代碼會在實(shí)例化該類對象時執(zhí)行。
this.getAge?=?function(){
return?age;
}
}
當(dāng)然了,js也可以繼承,但是在這里就不一一列舉了。
新聞名稱:類javascript的簡單介紹
轉(zhuǎn)載來源:http://chinadenli.net/article29/dsgpjch.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站收錄、定制網(wǎng)站、電子商務(wù)、網(wǎng)站內(nèi)鏈、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)