bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

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è)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,二連浩特網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(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)建的對象,本身沒有a屬性,所以向它的原型去找,發(fā)現(xiàn)原型的a屬性的屬性值為1,故該輸出值為1;

console.log(new

B().a);//new

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

console.log(new

C(2).a);//new

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

=

2,故屬性a的值為2;

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

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

求JavaScript部分 代碼講解?

求JavaScript部分 代碼講解?

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

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

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

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

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

ele.target = '_self';

return;

}

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

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

}while(ele);

},false);

}

javascript要學(xué)多久?

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

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

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

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

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

srcElement只在IE中有效。

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

給你一個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ù)來實現(xiàn)Mutex。

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

LockingPtr的定義非常簡單。LockingPtr實現(xiàn)一個相對簡單的smart pointer。它目的只是把一個const_cast和一個臨界區(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);

};

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

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

class SyncBuf {

public:

void Thread1();

void Thread2();

private:

typedef vectorchar BufT;

volatile BufT buffer_;

Mutex mtx_; //控制對buffer_的訪問

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

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

void SyncBuf::Thread1() {

LockingPtrBufT lpBuf(buffer_, mtx_);

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

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

...使用*i...

}

}

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

非常好的事情是,如果你犯了錯,編譯器會指出來:

void SyncBuf::Thread2() {

//錯誤,不能對一個volatile對象調(diào)用begin()

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

//錯誤!不能對一個volatile對象調(diào)用end()

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

...使用*i...

}

}

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

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

Unsigned int SyncBuf::Size() {

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

}

回到基本類型

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

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

Class Count

{

public:

...

void Increment() { ctr_; }

void Decrement() { --ctr_; }

private:

int ctr_;

};

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

* 讀取那個變量到寄存器

* 在寄存器中增加值

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

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

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

如果那時另一個處理器對同一個變量執(zhí)行一個RMW操作,我們就有了一個竟態(tài)條件;第二個寫操作覆蓋了第一個的結(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的代碼而言差了很多。為什么?因為在Counter里,如果你錯誤地直接訪問ctr_(沒有先對它加鎖)編譯器不會警告你。如果ctr_是volatile, ctr_也能編譯通過,但產(chǎn)生的代碼明顯是錯誤的。編譯器不再是你的幫手了,只有靠你自己注意才能避免這樣的竟態(tài)條件。

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

volatile成員函數(shù)

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

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

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

Class Widget

{

public:

void Operation() volatile;

void Operation();

...

private:

Mutex mtx_;

};

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

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

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

void Widget::Operation() volatile

{

LockingPtrWidget lpThis(*this, mtx_);

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

}

總結(jié)

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

* 定義所有的被共享的對象為volatile。

* 不要對基本類型直接用volatile

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

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

全的代碼而不用更多考慮竟態(tài)條件,因為編譯器能為你留心,會為你主動指出你錯誤的地方。

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

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

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

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

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

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

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

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

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

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

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

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

廣告

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

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