對Js OOP編程 創(chuàng)建對象的一些全面理解
面向?qū)ο笫且环N對現(xiàn)實世界理解和抽象的方法,是計算機(jī)編程技術(shù)發(fā)展到一定階段后的產(chǎn)物。
對象的含義
對象可以是汽車,人,動物,文字,表單或者任何存在的事物等等。
對象有:
屬性-------對象的某些特定的性質(zhì)。
方法-------對象能做的事情。
事件-------能響應(yīng)發(fā)生在對象上的事情。
我們可以通過創(chuàng)建一個人的對象來理解面向?qū)ο?/p>
人:
兩只手,兩只腳,一個頭,還可以跑動。
手,腳,頭,是人的屬性,跑動是人的方法。
首先,我們來用最簡單的方法創(chuàng)建一個對象
var person = {
head: "one",
hand: "two",
foot: "two",
run : function(){
console.log("running");
}
}
這個方法一點都不實用,因為它是創(chuàng)建一個單獨的對象,,而這個對象和任何常見的數(shù)據(jù)結(jié)構(gòu)沒有任何聯(lián)系。
然后,我們用構(gòu)造函數(shù)的方式創(chuàng)建一個對象
var Person = function(){//注意,首字母大寫
this.head = "one",
this.hand = "two",
this.foot = "two",
this.run = function(){
alert("running");
}
}
var Joan = new Person();
document.write(Joan.run())// "running"
這是用構(gòu)造函數(shù)創(chuàng)建的對象,然后我們再加上一行代碼看看
var Niki = new Person();
alert(Joan==Niki) //false;
是的,現(xiàn)在創(chuàng)建了是兩個不同的對象實例。
在JavaScript中的每個函數(shù)都有一個prototype的屬性.如果某個函數(shù)被用作構(gòu)造函數(shù),則這個屬性會被自動通過new調(diào)用創(chuàng)建對象的原型
console.log(Joan)
可以看到有一個__proto__:Person,其中__proto__是Joan的原型鏈.它是指向Person的原型.
JS在創(chuàng)建對象(不論是普通對象還是函數(shù)對象)的時候,都有一個叫做__proto__的內(nèi)置屬性,用于指向創(chuàng)建它的函數(shù)對象的原型對象prototype。
關(guān)于原型鏈的一些理解,在JavaScript高級程序設(shè)計 一書中寫的非常詳細(xì)。有興趣的可以去看看,網(wǎng)上也有pdf的文檔可以找到。不過建議還是買本書,支持原版嘛。
然后對prototype這個原型屬性的任何更改能夠應(yīng)用于用new Person()構(gòu)造的每一個實例對象,不管它是在更改之前還是更改后創(chuàng)建.為Person.prototype 添加新函數(shù).具體如下:
var Person = function(){//注意,首字母大寫
this.head = "one",
this.hand = "two",
this.foot = "two"
}
Person.prototype.run = function(){
alert("running");
}
var Joan = new Person();
Joan.run()// "running"
alert(Joan.__proto__===Person.prototype)//'true'
可以看到,在原型中創(chuàng)建方法是可以調(diào)用的,同時Joan的原型鏈?zhǔn)侵赶騊erson的原型的。
再看:
var Niki = new Person();//"runing"
Person.prototype.run = function(){
alert("running running")
}
Joan.run()//"running running"
Niki.run()//"running running"
看,修改Person的原型方法,所有被new Person()創(chuàng)建的對象實例中的方法都被修改了,因為所有實例中共用的是同一個原型方法run。這就是原型的一種應(yīng)用。
這就是關(guān)于創(chuàng)建對象的一些理解。
寫了好久。也不知道有沒有錯誤。 如果有錯誤,歡迎各位大大指點。
下次再寫面向?qū)ο罄^承方面的東西。
以上就是小編為大家?guī)淼膶s OOP編程 創(chuàng)建對象的一些全面理解全部內(nèi)容了,希望大家多多支持腳本之家~
- 玩轉(zhuǎn)JavaScript OOP - 類的實現(xiàn)詳解
- javascript基于prototype實現(xiàn)類似OOP繼承的方法
- Node.js事件循環(huán)(Event Loop)和線程池詳解
- Nodejs全??蚣躍trongLoop推薦
- JavaScript運行機(jī)制之事件循環(huán)(Event Loop)詳解
- JavaScript OOP面向?qū)ο蠼榻B
- javascript oop開發(fā)滑動(slide)菜單控件
- JavaScript OOP類與繼承
- JS OOP包機(jī)制,類創(chuàng)建的方法定義
- javascript 原型模式實現(xiàn)OOP的再研究
- javascript延時重復(fù)執(zhí)行函數(shù) lLoopRun.js
- 延時重復(fù)執(zhí)行函數(shù) lLoopRun.js
相關(guān)文章
詳解javascript中var與ES6規(guī)范中l(wèi)et、const區(qū)別與用法
es6剛流行那會,我只知道var即將退出歷史舞臺,取而代之的是let和const,卻不知道var有什么缺陷,為什么會被取代。今天在網(wǎng)上看到一段視頻,解答了我的疑惑2020-01-01
JavaScript字符串對象toLowerCase方法入門實例(用于把字母轉(zhuǎn)換為小寫)
這篇文章主要介紹了JavaScript字符串對象toLowerCase方法入門實例,toLowerCase方法用于把字母字符串轉(zhuǎn)換為小寫形式,需要的朋友可以參考下2014-10-10
javascript中的=等號個數(shù)問題兩個跟三個有什么區(qū)別
一個等號就是個賦值的作用,主要問題在于兩個跟三個等號的區(qū)別,想必有很多的朋友都不知道吧,在本文有個不錯的示例主要介紹下兩者到底有什么區(qū)別,感興趣的朋友不要錯過2013-10-10
JavaScript fontcolor方法入門實例(按照指定的顏色來顯示字符串)
這篇文章主要介紹了JavaScript fontcolor方法入門實例,fontcolor方法用于按照指定的顏色來顯示字符串,需要的朋友可以參考下2014-10-10
JavaScript中數(shù)組的合并以及排序?qū)崿F(xiàn)示例
這篇文章主要介紹了JavaScript中數(shù)組的合并以及排序?qū)崿F(xiàn)示例,是JavaScript入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10

