欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

javascript講解,Javascript教程

關(guān)于js原型的面試題講解

今天遇到關(guān)于javascript原型的一道面試題,現(xiàn)分析下:

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),二連浩特企業(yè)網(wǎng)站建設(shè),二連浩特品牌網(wǎng)站建設(shè),網(wǎng)站定制,二連浩特網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,二連浩特網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

原題如下:

function

A(){

}

function

B(a){

this.a

=

a;

}

function

C(a){

if(a){

this.a

=

a;

}

}

A.prototype.a

=

1;

B.prototype.a

=

1;

C.prototype.a

=

1;

console.log(new

A().a);

console.log(new

B().a);

console.log(new

C(2).a);

分析:

console.log(new

A().a);//new

A()為構(gòu)造函數(shù)創(chuàng)建的對(duì)象,本身沒有a屬性,所以向它的原型去找,發(fā)現(xiàn)原型的a屬性的屬性值為1,故該輸出值為1;

console.log(new

B().a);//new

B()為構(gòu)造函數(shù)創(chuàng)建的對(duì)象,該構(gòu)造函數(shù)有參數(shù)a,但該對(duì)象沒有傳參,故該輸出值為undefined;

console.log(new

C(2).a);//new

C()為構(gòu)造函數(shù)創(chuàng)建的對(duì)象,該構(gòu)造函數(shù)有參數(shù)a,且傳的實(shí)參為2,執(zhí)行函數(shù)內(nèi)部,發(fā)現(xiàn)if為真,執(zhí)行this.a

=

2,故屬性a的值為2;

故這三個(gè)的輸出值分別為:1、undefined、2.

以上就是小編為大家?guī)淼年P(guān)于js原型的面試題講解的全部?jī)?nèi)容了,希望對(duì)大家有所幫助,多多支持腳本之家~

求JavaScript部分 代碼講解?

求JavaScript部分 代碼講解?

if(/\((iPhone|iPad|iPod)/i.test(navigator.userAgent) == false){return;} //代表如果不是iPhone,iPad,iPod返回

document.addEventListener('mouseover', function(e){ //添加一個(gè)監(jiān)聽事件.當(dāng)鼠標(biāo)移上時(shí)執(zhí)行后邊的函數(shù)

var ele = e.target; //獲取當(dāng)前對(duì)象的打開放式

do{ //如果是A鏈接打開放式為在自己的窗口打開,如果是div返回,

if(ele.tagName == 'A'){

ele.target = '_self';

return;

}

if(ele.tagName == 'DIV'){return;}

ele = ele.parentNode; //然后把父節(jié)點(diǎn)賦值給ELE

}while(ele);

},false);

}

javascript要學(xué)多久?

從0基礎(chǔ)到勉強(qiáng)能用,只求入門的話2-3個(gè)月綽綽有余,但是要精通的話肯定是需要花更多時(shí)間日積月累了,選擇培訓(xùn)的話是要參與一些項(xiàng)目聯(lián)練習(xí)的,因?yàn)镴avaScript很多技巧不通過項(xiàng)目這樣比較大的歷練是用不上的。千鋒官網(wǎng)每日更新最新軟件開發(fā)基礎(chǔ)知識(shí)內(nèi)容,鞏固日常學(xué)習(xí)中的基礎(chǔ)技能。更有免費(fèi)的軟件開發(fā)視頻教程幫助學(xué)員快速學(xué)習(xí)。 千鋒教育就有線上免費(fèi)的軟件開發(fā)公開課,。

Web前端培訓(xùn)多長(zhǎng)時(shí)間,只能說簡(jiǎn)單入門在五到六個(gè)月,真正要達(dá)到精通級(jí)別的話,需要天賦跟經(jīng)驗(yàn)的積累。正所謂,一入前端深似海,從此回首無邊界。活到老,學(xué)到老。只要步入了前端開發(fā)你就會(huì)發(fā)現(xiàn),前端真的是要一直不停的學(xué),不停的學(xué)。千鋒教育集團(tuán)目前已與國(guó)內(nèi)4000多家企業(yè)建立人才輸送合作,與500多所大學(xué)建立實(shí)訓(xùn)就業(yè)合作,每年為各大企業(yè)輸送上萬名移動(dòng)開發(fā)工程師,每年有數(shù)十萬名學(xué)員受益于千鋒教育組織的技術(shù)研討會(huì)、技術(shù)培訓(xùn)課、網(wǎng)絡(luò)公開課及免費(fèi)教學(xué)視頻。

誰能詳細(xì)講解一下javascript中的srcelement......

srcElement 是Dom事件中的事件最初指派到的元素。

比如有一個(gè)div,里面有一個(gè)按鈕。你響應(yīng)div的onclick事件,但實(shí)際上,你單擊的只是它內(nèi)部的按鈕,那么,srcElement指向的,就是那個(gè)按鈕。

srcElement只在IE中有效。

在Opera系列瀏覽器中對(duì)應(yīng)的屬性是target

給你一個(gè)IE下使用的例子。

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""

html xmlns=""

head

title無標(biāo)題頁/title

script type="text/javascript"

function onLoad()

{

document.getElementById( "myDiv" ).attachEvent( "onclick", on_myDivClick );

}

function onUnLoad()

{

document.getElementById( "myDiv" ).detachEvent( "onclick", on_myDivClick );

}

function on_myDivClick( e )

{

if( !e ) e = window.event;

alert( "event: " + e.type + ", fromElement = " + e.srcElement.id );

}

/script

/head

body onload="onLoad()" onunload="onUnLoad()"

div id="myDiv"

input type="button" id="btn1" value="button1" /

input type="button" id="btn2" value="button2" /

/div

/body

/html

javascript 中的泛型詳解

首先我們來定義LockingPtr用到的Mutex類的骨架:

class Mutex

{

public:

void Acquire();

void Release();

...

};

為了能使用LockingPtr,你要用你操作系統(tǒng)用到的數(shù)據(jù)結(jié)構(gòu)和基本函數(shù)來實(shí)現(xiàn)Mutex。

LockingPtr用受控的變量的類型來作為模板。舉例來說,如果你想管理一個(gè)Widget,你使用一個(gè)LockingPtrWidget,這樣你可以用一個(gè)類型為volatile Widget的變量來初始化它。

LockingPtr的定義非常簡(jiǎn)單。LockingPtr實(shí)現(xiàn)一個(gè)相對(duì)簡(jiǎn)單的smart pointer。它目的只是把一個(gè)const_cast和一個(gè)臨界區(qū)集中在一起。

Template typename T

Class LockingPtr {

Public:

//構(gòu)造/析構(gòu)函數(shù)

LockingPtr(volatile T obj, Mutex mtx)

: pObj_(const_castT*(obj)),

pMtx_(mtx)

{ mtx.Lock(); }

~LockingPtr()

{ pMtx_-Unlock(); }

//模擬指針行為

T operator*()

{ return *pObj_; }

T* operator-()

{ return pObj_; }

private:

T* pObj_;

Mutex* pMtx_;

LockingPtr(const LockingPtr);

LockingPtr operator=(const LockingPtr);

};

盡管簡(jiǎn)單,LockingPtr對(duì)寫出正確的多線程代碼非常有幫助。你應(yīng)該把被幾個(gè)線程共享的對(duì)象定義為volatile而且不能對(duì)它們使用const_cast——應(yīng)該始終使用LockingPtr自動(dòng)對(duì)象。我們通過一個(gè)例子來說明:

假設(shè)你有兩個(gè)線程共享一個(gè)vectorchar對(duì)象

class SyncBuf {

public:

void Thread1();

void Thread2();

private:

typedef vectorchar BufT;

volatile BufT buffer_;

Mutex mtx_; //控制對(duì)buffer_的訪問

}; 軟件開發(fā)網(wǎng)

在一個(gè)線程函數(shù)中,你簡(jiǎn)單地使用一個(gè)LockingPtrBufT來取得對(duì)buffer_成員變量的受控訪問:

void SyncBuf::Thread1() {

LockingPtrBufT lpBuf(buffer_, mtx_);

BufT::iterator I = lpBuf-begin();

For (; I != lpBuf-end(); I) {

...使用*i...

}

}

這些代碼既非常容易寫也非常容易懂——任何時(shí)候你需要用到buffer_,你必須創(chuàng)建一個(gè)LockingPtrBufT指向它。一旦你這樣做,你就能夠使用vecotr的所有接口。

非常好的事情是,如果你犯了錯(cuò),編譯器會(huì)指出來:

void SyncBuf::Thread2() {

//錯(cuò)誤,不能對(duì)一個(gè)volatile對(duì)象調(diào)用begin()

BufT::iterator I = buffer_.begin();

//錯(cuò)誤!不能對(duì)一個(gè)volatile對(duì)象調(diào)用end()

for (; I != lpBuf-end(); I) {

...使用*i...

}

}

你不能調(diào)用buffer_的任何函數(shù),除非你要么使用一個(gè)const_cast要么使用LockingPtr。區(qū)別是LockingPtr提供了一個(gè)有序的途徑來對(duì)volatile變量使用const_cast。

LockingPtr非常有表現(xiàn)力。如果你只需要調(diào)用一個(gè)函數(shù),你能夠創(chuàng)建一個(gè)無名臨時(shí)LockingPtr對(duì)象并直接使用它:

Unsigned int SyncBuf::Size() {

Return LockingPtrBufT(buffer_, mtx_)-size();

}

回到基本類型

我們已經(jīng)看到了volatile保護(hù)對(duì)象不被不受控制地訪問時(shí)是多么出色,也看到了LockingPtr提供了多么簡(jiǎn)單和高效的方法來寫線程安全的代碼。讓我們回到基本類型,那些加了volatile后行為與用戶自定類型不同的類型

我們來考慮一個(gè)例子,多個(gè)線程共享一個(gè)類型為int的變量。

Class Count

{

public:

...

void Increment() { ctr_; }

void Decrement() { --ctr_; }

private:

int ctr_;

};

如果Increment和Decrement被不同線程調(diào)用,上面的代碼片段是有問題的。首先,ctr_必須是volatile,其次,即使象 ctr_那樣看上去是原子操作的函數(shù)實(shí)際上是一個(gè)三步操作。內(nèi)存本身沒有算術(shù)能力,當(dāng)遞增一個(gè)變量時(shí),處理器:

* 讀取那個(gè)變量到寄存器

* 在寄存器中增加值

* 把結(jié)果寫回內(nèi)存

這個(gè)三步操作叫做RMW(Read-ModifyWrite 讀-改-寫)。在執(zhí)行一個(gè)RMW操作的“改”

操作時(shí),為了讓其他處理器訪問內(nèi)存,大多數(shù)處理器會(huì)釋放內(nèi)存總線。

如果那時(shí)另一個(gè)處理器對(duì)同一個(gè)變量執(zhí)行一個(gè)RMW操作,我們就有了一個(gè)竟態(tài)條件;第二個(gè)寫操作覆蓋了第一個(gè)的結(jié)果。

你也能夠用LockingPtr避免這種情況:

class Counter

{

public:

...

void Increment() { *LockingPtrint(ctr_, mtx_); }

void Decrement() { --*LockingPtrint(ctr_, mtx_); }

private:

volatile int ctr_;

Mutex mtx_;

};

現(xiàn)在代碼正確了,但代碼質(zhì)量比較SyncBuf的代碼而言差了很多。為什么?因?yàn)樵贑ounter里,如果你錯(cuò)誤地直接訪問ctr_(沒有先對(duì)它加鎖)編譯器不會(huì)警告你。如果ctr_是volatile, ctr_也能編譯通過,但產(chǎn)生的代碼明顯是錯(cuò)誤的。編譯器不再是你的幫手了,只有靠你自己注意才能避免這樣的竟態(tài)條件。

那你應(yīng)該怎么做?簡(jiǎn)單地把你用到的基本數(shù)據(jù)包裝為更高層次的結(jié)構(gòu),對(duì)那些結(jié)構(gòu)用volatile。荒謬的是,盡管本來volatile的用途是用在內(nèi)建類型上,但實(shí)際上直接這樣做不是個(gè)好主意!

volatile成員函數(shù)

到目前為止,我們已經(jīng)有了包含有volatile數(shù)據(jù)成員的類,現(xiàn)在我們來考慮設(shè)計(jì)作為更大對(duì)象一部分的類,這些類也被多線程共享。在這里用volatile成員函數(shù)有很大幫助。

當(dāng)設(shè)計(jì)你的類時(shí),你只對(duì)那些線程安全的成員函數(shù)加voaltile標(biāo)識(shí)。你必須假定外部代碼會(huì)用任何代碼在任何時(shí)刻調(diào)用volatile函數(shù)。不要忘記:volatile等于可自由用于多線程代碼而不用臨界區(qū),非volatile等于單線程環(huán)境或在一個(gè)臨界區(qū)內(nèi)。

例如,你定義一個(gè)Widget類,實(shí)現(xiàn)一個(gè)函數(shù)的兩個(gè)變化——一個(gè)線程安全的和一個(gè)快的,無保護(hù)的。

Class Widget

{

public:

void Operation() volatile;

void Operation();

...

private:

Mutex mtx_;

};

注意用了重載。現(xiàn)在Widget的用戶可以用同樣的語法來調(diào)用Operation,無論你為了獲得線程安全調(diào)用volatile對(duì)象的Operation還是為了獲得速度調(diào)用常規(guī)對(duì)象的Operation。但用戶必須小心地把被多線程共享的Widget對(duì)象定義為volatile。

當(dāng)實(shí)現(xiàn)一個(gè)volatile成員函數(shù)時(shí),第一個(gè)操作通常是對(duì)this用一個(gè)LockingPtr加鎖。剩下的工作可以交給非volatile的對(duì)應(yīng)函數(shù):

軟件開發(fā)網(wǎng)

void Widget::Operation() volatile

{

LockingPtrWidget lpThis(*this, mtx_);

LpThis-Operation(); //調(diào)用非volatile函數(shù)

}

總結(jié)

當(dāng)寫多線程程序時(shí),你可以用volatile得到好處。你必須遵守下面的規(guī)則:

* 定義所有的被共享的對(duì)象為volatile。

* 不要對(duì)基本類型直接用volatile

* 當(dāng)定義可被共享類時(shí),使用volatile成員函數(shù)來表示線程安全。

如果你這樣做,而且如果你使用那個(gè)簡(jiǎn)單的返型組件LockingPtr,你能夠?qū)懗鼍€程安

全的代碼而不用更多考慮竟態(tài)條件,因?yàn)榫幾g器能為你留心,會(huì)為你主動(dòng)指出你錯(cuò)誤的地方。

我參與的幾個(gè)使用volatile和LockingPtr的計(jì)劃獲得很好的效果。代碼清晰易懂。我記得碰到幾處死鎖,但我情愿遇到死鎖也不要竟態(tài)條件,因?yàn)樗梨i調(diào)試起來容易得多。事實(shí)上沒有遇到任何問題是關(guān)于竟態(tài)條件的。

如何正確學(xué)習(xí)JavaScript

學(xué)習(xí)javascript沒HTMl基礎(chǔ)有點(diǎn)難度,建議你先熟悉html再學(xué)習(xí)。

JavaScript簡(jiǎn)稱JS,之前的基礎(chǔ)就是HTML,HTML這門課程如果入門的話不是很難,刻苦點(diǎn)一月到兩月就能搞定,有HTML基礎(chǔ)的話,只要繼續(xù)刻苦一個(gè)月左右JS就能入門,但是想學(xué)到高深那就不容易了,js入門后在繼續(xù)學(xué)可以說也是有些難度的。總之先掌握HTML,這是一個(gè)基礎(chǔ),正如你說話要先從aoe開始一樣,HTML也很容易學(xué)的

HTML推薦書籍:深入淺出HTML和CSS

JS推薦書籍:《javascript入門經(jīng)典》

這些書籍可以幫助你怎么學(xué)習(xí),其實(shí)不止看書,你也可以看看視頻,多看視頻講解學(xué)習(xí)可以讓你少走很多彎路,節(jié)省不少時(shí)間。遇見問題,常百度一下,現(xiàn)在百度只有你想不到的,沒有你查不到的,沒有你要的答案,也能查到相關(guān)的,何況可以提問嘛……

人就是在不斷的問題中解決問題,發(fā)現(xiàn)新的問題,繼續(xù)解決問題,這樣自己的自學(xué)能力和技術(shù)能夠得到很大的提升,關(guān)鍵就是不懂一定馬上問,千萬不要隨便拖,這樣進(jìn)步才叫快……

還有補(bǔ)充一下,學(xué)習(xí)重在實(shí)踐,因?yàn)橹挥袑?shí)踐你才能更好的發(fā)現(xiàn)自己的問題,一個(gè)問題解決了,一次不記得,下次繼續(xù)做的時(shí)候再手打一次,但是別抄之前自己寫過的代碼,除非你覺得自己這段代碼已經(jīng)掌握了,這樣為了節(jié)省時(shí)間才抄,否則還是練練手最好,,萬變不離其宗——熟能生巧……

如果你精通了,那就好辦了,一個(gè)網(wǎng)站可能就被你開發(fā)出來,然后就不愁找不到好工作了,至于你認(rèn)為學(xué)到什么地步算精通,這你自己在學(xué)習(xí)中就可以感受到自己的能力,說的夠多了,一時(shí)說不完,就這樣,最后祝你成功,嘎嘎嘎嘎……

分享標(biāo)題:javascript講解,Javascript教程
當(dāng)前鏈接:http://www.chinadenli.net/article44/dsdidhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)服務(wù)器托管靜態(tài)網(wǎng)站App設(shè)計(jì)網(wǎng)站策劃自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)