成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端面試集錦2017/4/13更新

iflove / 2449人閱讀

摘要:情況三作為構(gòu)造函數(shù)調(diào)用所謂構(gòu)造函數(shù),就是通過這個(gè)函數(shù)生成一個(gè)新對(duì)象。讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系在這張圖中我們用表示實(shí)例原型。

瀏覽器的內(nèi)核分別是什么?
IE: trident內(nèi)核
Firefox:gecko內(nèi)核
Safari:webkit內(nèi)核
Opera:以前是presto內(nèi)核,Opera現(xiàn)已改用Google Chrome的Blink內(nèi)核
Chrome:Blink(基于webkit,Google與Opera Software共同開發(fā))

null與undefined的區(qū)別?

(1)null表示"沒有對(duì)象",即該處不應(yīng)該有值。典型用法是:

①作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對(duì)象。
②作為對(duì)象原型鏈的終點(diǎn)。

(2)undefined表示"缺少值",就是此處應(yīng)該有一個(gè)值,但是還沒有定義。典型用法是:

①變量被聲明了,但沒有賦值時(shí),就等于undefined。
②調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined。
③對(duì)象沒有賦值的屬性,該屬性的值為undefined。
④函數(shù)沒有返回值時(shí),默認(rèn)返回undefined。

簡(jiǎn)述一下src與href的區(qū)別
href 時(shí)指向網(wǎng)絡(luò)資源所在位置,建立和當(dāng)前元素(錨點(diǎn))或當(dāng)前文檔(鏈接)之間的鏈接,用于超鏈接。

src 時(shí)指向外部的資源位置,指向的內(nèi)容將會(huì)嵌入到文檔中當(dāng)前標(biāo)簽所在位置;
在請(qǐng)求 src 資源時(shí)會(huì)將其指向的資源下載并應(yīng)用到文檔內(nèi),例如 js 腳本,img 圖片和 frame 等元素。當(dāng)瀏
覽器解析到該元素時(shí),會(huì)暫停其他資源的下載和處理,直到將該資源加載、編譯、執(zhí)行完畢,圖片和框架等元
素也是如此,類似于將所指向資源嵌入當(dāng)前標(biāo)簽內(nèi)。這也是為什么將 js 腳本放在底部而不是頭部。

HTML中引入CSS的方法

行內(nèi)式

?行內(nèi)式是在標(biāo)記的style屬性中設(shè)定CSS樣式。這種方式?jīng)]有體現(xiàn)出CSS的優(yōu)勢(shì),不推薦使用。
...此處寫CSS樣式 ???缺點(diǎn)是對(duì)于一個(gè)包含很多網(wǎng)頁的網(wǎng)站,在每個(gè)網(wǎng)頁中使用嵌入式,進(jìn)行修改樣式時(shí)非常麻煩。單 ???一網(wǎng)頁可以考慮使用嵌入式。

導(dǎo)入式

將一個(gè)獨(dú)立的.css文件引入HTML文件中,導(dǎo)入式使用CSS規(guī)則引入外部CSS文件,
             
導(dǎo)入式會(huì)在整個(gè)網(wǎng)頁裝載完后再裝載CSS文件,因此這就導(dǎo)致了一個(gè)問題,如果網(wǎng)頁比較大則會(huì)兒出現(xiàn)
先顯示無樣式的頁面,閃爍一下之后,再出現(xiàn)網(wǎng)頁的樣式。這是導(dǎo)入式固有的一個(gè)缺陷。

鏈接式

也是將一個(gè).css文件引入到HTML文件中,但它與導(dǎo)入式不同的是鏈接式使用HTML規(guī)則引入外部CSS文件,它
在網(wǎng)頁的標(biāo)簽對(duì)中使用標(biāo)記來引入外部樣式表文件,使用語法如下:

使用鏈接式時(shí)與導(dǎo)入式不同的是它會(huì)以網(wǎng)頁文件主體裝載前裝載CSS文件,因此顯示出來的網(wǎng)頁從一開始
就是帶樣式的效果的,它不會(huì)象導(dǎo)入式那樣先顯示無樣式的網(wǎng)頁,然后再顯示有樣式的網(wǎng)頁,這是鏈接
式的優(yōu)點(diǎn)。

如何使得一個(gè)DOM元素在瀏覽器可視范圍內(nèi)不顯示?
最基本的:
設(shè)置 display:none; 或  visibility:hidden;

技巧性的:
設(shè)置寬高為0,透明度為0,設(shè)置 z-index:-1000px;

display:none 與 visibility:hidden的區(qū)別?

是否是繼承屬性:display不是繼承屬性,而visibility是繼承屬性,后代元素的visibility屬性若存在則不會(huì)繼承,若不存在則繼承父元素visibility的值,意味著:父元素的visibility為hidden但是子元素的visibility為visible則子元素依舊可見,子元素visibility不存在則子元素不可見。而元素的display屬性設(shè)為none其后整棵子樹都不可見。

是否占據(jù)空間:使用display:none,在文檔渲染時(shí),該元素如同不存在(但依然存在文檔對(duì)象模型樹中);而使用visibility:hidden,其占的空間會(huì)被空白占位。即一個(gè)(display:none)不會(huì)在渲染樹中出現(xiàn),一個(gè)(visibility:hidden)會(huì)。

頁面相關(guān)屬性改值后是否重新渲染:visibility :hidden不渲染;display:none渲染

px、em、rem的區(qū)別?

px、em都是長(zhǎng)度單位。區(qū)別:px的值是固定的,寫多少就是多少,容易計(jì)算。em的值不是固定的,em繼承父元素的字體大小。
rem是CSS3新引進(jìn)來的一個(gè)度量單位,rem是相對(duì)于根元素,這樣就意味著,我們只需要在根元素確定一個(gè)參考值,在根元素中設(shè)置多大的字體,這完全可以根據(jù)您自己的需求。

簡(jiǎn)述盒子模型
盒子模型:內(nèi)容、內(nèi)邊距、外邊距、邊框

DOCTYPE的作用?嚴(yán)格模式與混雜模式的區(qū)別?

DOCTYPE聲明位于文檔的最前面,處于標(biāo)簽之前。告訴瀏覽器的解析器,用什么文檔類型規(guī)范來解析這個(gè)文檔。
在標(biāo)準(zhǔn)模式中,瀏覽器以其支持的最高標(biāo)準(zhǔn)呈現(xiàn)頁面;在混雜模式中,頁面以一種比較寬松的向后兼容的方式顯示?;祀s模式通常模擬老式瀏覽器的行為以防止老站點(diǎn)無法工作。

Javascript的this用法?

情況一:純粹的函數(shù)調(diào)用

這是函數(shù)的最通常用法,屬于全局性調(diào)用,因此this就代表全局對(duì)象Global。
請(qǐng)看下面這段代碼,它的運(yùn)行結(jié)果是1。
  

   function test(){
      this.x = 1;
      alert(this.x);
    }
    test(); // 1

為了證明this就是全局對(duì)象,我對(duì)代碼做一些改變:
  

      var x = 1;
    function test(){
      alert(this.x);
    }
    test(); // 1

運(yùn)行結(jié)果還是1。再變一下:
  

var x = 1;

    function test(){
      this.x = 0;
    }
    test();
    alert(x); //0

  
情況二:作為對(duì)象方法的調(diào)用

函數(shù)還可以作為某個(gè)對(duì)象的方法調(diào)用,這時(shí)this就指這個(gè)上級(jí)對(duì)象。
  

     function test(){
      alert(this.x);
    }
    var o = {};
    o.x = 1;
    o.m = test;
    o.m(); // 1

  
情況三 作為構(gòu)造函數(shù)調(diào)用

所謂構(gòu)造函數(shù),就是通過這個(gè)函數(shù)生成一個(gè)新對(duì)象(object)。這時(shí),this就指這個(gè)新對(duì)象。
  

 function test(){
      this.x = 1;
    }
    var o = new test();
    alert(o.x); // 1

運(yùn)行結(jié)果為1。為了表明這時(shí)this不是全局對(duì)象,我對(duì)代碼做一些改變:
  

     var x = 2;
    function test(){
      this.x = 1;
    }
    var o = new test();
    alert(x); //2

運(yùn)行結(jié)果為2,表明全局變量x的值根本沒變。

情況四 apply調(diào)用

apply()是函數(shù)對(duì)象的一個(gè)方法,它的作用是改變函數(shù)的調(diào)用對(duì)象,它的第一個(gè)參數(shù)就表示改變后的調(diào)用這個(gè)函數(shù)的對(duì)象。因此,this指的就是這第一個(gè)參數(shù)。
  

      var x = 0;
    function test(){
      alert(this.x);
    }
    var o={};
    o.x = 1;
    o.m = test;
    o.m.apply(); //0

apply()的參數(shù)為空時(shí),默認(rèn)調(diào)用全局對(duì)象。因此,這時(shí)的運(yùn)行結(jié)果為0,證明this指的是全局對(duì)象。
如果把最后一行代碼修改為
  o.m.apply(o); //1
運(yùn)行結(jié)果就變成了1,證明了這時(shí)this代表的是對(duì)象o。

JavaScript如何實(shí)現(xiàn)繼承?
一、構(gòu)造繼承法;
二、原型繼承法;
三、實(shí)例繼承法;

JavaScript深入之從原型到原型鏈

JavaScript深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來看看這篇文章吧。

構(gòu)造函數(shù)創(chuàng)建對(duì)象

我們先使用構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象:

 

      function Person() {
     
      } 
      var person = new Person();
      person.name = "Kevin"; 
      console.log(person.name) // Kevin
      

在這個(gè)例子中,Person 就是一個(gè)構(gòu)造函數(shù),我們使用 new 創(chuàng)建了一個(gè)實(shí)例對(duì)象 person。
很簡(jiǎn)單吧,接下來進(jìn)入正題:

prototype

每個(gè)函數(shù)都有一個(gè) prototype 屬性,就是我們經(jīng)常在各種例子中看到的那個(gè) prototype ,比如:

 function Person() {
    
 } 
 // 雖然寫在注釋里,但是你要注意:
 // prototype是函數(shù)才會(huì)有的屬性
 Person.prototype.name = "Kevin"; 
 var person1 = new Person(); 
 var person2 = new Person(); 
 console.log(person1.name) // Kevin
 console.log(person2.name) // Kevin 

那這個(gè)函數(shù)的 prototype屬性到底指向的是什么呢?是這個(gè)函數(shù)的原型嗎?

其實(shí),函數(shù)的 prototype屬性指向了一個(gè)對(duì)象,這個(gè)對(duì)象正是調(diào)用該構(gòu)造函數(shù)而創(chuàng)建的實(shí)例的原型,也就是這個(gè)例子中的 person1 和 person2 的原型。

那什么是原型呢?你可以這樣理解:每一個(gè)JavaScript對(duì)象(null除外)在創(chuàng)建的時(shí)候就會(huì)與之關(guān)聯(lián)另一個(gè)對(duì)象,這個(gè)對(duì)象就是我們所說的原型,每一個(gè)對(duì)象都會(huì)從原型"繼承"屬性。

讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系:

在這張圖中我們用 Object.prototype 表示實(shí)例原型。

那么我們?cè)撛趺幢硎緦?shí)例與實(shí)例原型,也就是 person 和 Person.prototype 之間的關(guān)系呢,這時(shí)候我們就要講到第二個(gè)屬性:

_proto _

這是每一個(gè)JavaScript對(duì)象(除了 null )都具有的一個(gè)屬性,叫__proto__,這個(gè)屬性會(huì)指向該對(duì)象的原型。

為了證明這一點(diǎn),我們可以在火狐或者谷歌中輸入:

function Person() { 
   
} 
var person = new Person(); 
console.log(person.__proto__  === Person.prototype); // true 

于是我們更新下關(guān)系圖:

既然實(shí)例對(duì)象和構(gòu)造函數(shù)都可以指向原型,那么原型是否有屬性指向構(gòu)造函數(shù)或者實(shí)例呢?

constructor

指向?qū)嵗故菦]有,因?yàn)橐粋€(gè)構(gòu)造函數(shù)可以生成多個(gè)實(shí)例,但是原型指向構(gòu)造函數(shù)倒是有的,這就要講到第三個(gè)屬性:constructor,每個(gè)原型都有一個(gè) constructor 屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)。

為了驗(yàn)證這一點(diǎn),我們可以嘗試:

function Person(){
   
} 
console.log(Person === Person.prototype.constructor); // true

所以再更新下關(guān)系圖: 綜上我們已經(jīng)得出:

function Person() {
 
} 
var person = new Person();
console.log(person.__proto__ == Person.prototype) // true
console.log(Person.prototype.constructor == Person) // true 
//順便學(xué)習(xí)一個(gè)ES5的方法,可以獲得對(duì)象的原型 
console.log(Object.getPrototypeOf(person) === Person.prototype) // true 

了解了構(gòu)造函數(shù)、實(shí)例原型、和實(shí)例之間的關(guān)系,接下來我們講講實(shí)例和原型的關(guān)系:

實(shí)例與原型

當(dāng)讀取實(shí)例的屬性時(shí),如果找不到,就會(huì)查找與對(duì)象關(guān)聯(lián)的原型中的屬性,如果還查不到,就去找原型的原型,一直找到最頂層為止。

舉個(gè)例子:

function Person() { 

}
Person.prototype.name = "Kevin"; var
person = new Person(); person.name = "Daisy";
console.log(person.name) // Daisy delete person.name;
console.log(person.name) // Kevin 

在這個(gè)例子中,我們給實(shí)例對(duì)象 person 添加了 name 屬性,當(dāng)我們打印 person.name 的時(shí)候,結(jié)果自然為 Daisy。

但是當(dāng)我們刪除了 person 的 name 屬性時(shí),讀取person.name,從 person 對(duì)象中找不到 name 屬性就會(huì)從 person 的原型也就是 person.__proto__,也就是 Person.prototype中查找,幸運(yùn)的是我們找到了 name 屬性,結(jié)果為 Kevin。

但是萬一還沒有找到呢?原型的原型又是什么呢?

原型的原型

在前面,我們已經(jīng)講了原型也是一個(gè)對(duì)象,既然是對(duì)象,我們就可以用最原始的方式創(chuàng)建它,那就是:

var obj = new Object();
obj.name = "Kevin";
console.log(obj.name) // Kevin 

所以原型對(duì)象是通過 Object構(gòu)造函數(shù)生成的,結(jié)合之前所講,實(shí)例的 _proto _ 指向構(gòu)造函數(shù)的 prototype ,所以我們?cè)俑孪玛P(guān)系圖:

原型鏈

那Object.prototype 的原型呢?

null,不信我們可以打印:

console.log(Object.prototype.__proto__ === null) // true 
   

所以查到屬性的時(shí)候查到Object.prototype 就可以停止查找了。

所以最后一張關(guān)系圖就是

順便還要說一下,圖中由相互關(guān)聯(lián)的原型組成的鏈狀結(jié)構(gòu)就是原型鏈,也就是藍(lán)色的這條線。

補(bǔ)充

最后,補(bǔ)充三點(diǎn)大家可能不會(huì)注意的地方:

constructor

首先是 constructor 屬性,我們看個(gè)例子:

function Person() {

 } 
var person = new Person(); 
console.log(person.constructor === Person); //  true

當(dāng)獲取 person.constructor 時(shí),其實(shí) person 中并沒有 constructor屬性,當(dāng)不能讀取到constructor 屬性時(shí),會(huì)從 person 的原型也就是 Person.prototype中讀取,正好原型中有該屬性,所以:

person.constructor === Person.prototype.constructor

_proto _

其次是 _proto _ ,絕大部分瀏覽器都支持這個(gè)非標(biāo)準(zhǔn)的方法訪問原型,然而它并不存在于 Person.prototype 中,實(shí)際上,它是來自于 Object.prototype ,與其說是一個(gè)屬性,不如說是一個(gè)getter/setter,當(dāng)使用 obj._ proto _ 時(shí),可以理解成返回了
Object.getPrototypeOf(obj)。

真的是繼承嗎?

最后是關(guān)于繼承,前面我們講到“每一個(gè)對(duì)象都會(huì)從原型‘繼承’屬性”,實(shí)際上,繼承是一個(gè)十分具有迷惑性的說法,引用《你不知道的JavaScript》中的話,就是:

繼承意味著復(fù)制操作,然而 JavaScript 默認(rèn)并不會(huì)復(fù)制對(duì)象的屬性,相反,JavaScript
只是在兩個(gè)對(duì)象之間創(chuàng)建一個(gè)關(guān)聯(lián),這樣,一個(gè)對(duì)象就可以通過委托訪問另一個(gè)對(duì)象的屬性和函數(shù),所以與其叫繼承,委托的說法反而更準(zhǔn)確些。

========================================待更新===========================================

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/116687.html

相關(guān)文章

  • 前端面試集錦2017/4/13更新

    摘要:情況三作為構(gòu)造函數(shù)調(diào)用所謂構(gòu)造函數(shù),就是通過這個(gè)函數(shù)生成一個(gè)新對(duì)象。讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系在這張圖中我們用表示實(shí)例原型。 瀏覽器的內(nèi)核分別是什么? IE: trident內(nèi)核 Firefox:gecko內(nèi)核 Safari:webkit內(nèi)核 Opera:以前是presto內(nèi)核,Opera現(xiàn)已改用Google Chrome的Blink內(nèi)核 Chrome:Blink(...

    geekzhou 評(píng)論0 收藏0
  • 前端面試集錦2017/4/13更新

    摘要:情況三作為構(gòu)造函數(shù)調(diào)用所謂構(gòu)造函數(shù),就是通過這個(gè)函數(shù)生成一個(gè)新對(duì)象。讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系在這張圖中我們用表示實(shí)例原型。 瀏覽器的內(nèi)核分別是什么? IE: trident內(nèi)核 Firefox:gecko內(nèi)核 Safari:webkit內(nèi)核 Opera:以前是presto內(nèi)核,Opera現(xiàn)已改用Google Chrome的Blink內(nèi)核 Chrome:Blink(...

    yzd 評(píng)論0 收藏0
  • 「大集錦」WEB前端開發(fā) 辨析類 面試真題

    摘要:學(xué)堂碼匠面試?yán)镒畛3霈F(xiàn)的問題句式大概就是說說和的區(qū)別談?wù)労偷牟煌税梢徊úǖ谋嫖鲱}正在襲來,快快開啟防御,殺出重圍,來一場(chǎng)絕地反擊僵尸,啊,不對(duì),辨析三連發(fā)掃描了眾多的面試題,發(fā)現(xiàn)額各個(gè)技術(shù)之間的辨析真的是如僵尸一般,一波一波的相信不少人 HTML5學(xué)堂-碼匠:面試?yán)镒畛3霈F(xiàn)的問題句式大概就是說說XXX和XXX的區(qū)別談?wù)刋XX和XXX的不同了吧~!一波波的辨析題正在襲來,快快開啟防御,...

    CoderStudy 評(píng)論0 收藏0
  • 「大集錦」WEB前端開發(fā) 辨析類 面試真題

    摘要:學(xué)堂碼匠面試?yán)镒畛3霈F(xiàn)的問題句式大概就是說說和的區(qū)別談?wù)労偷牟煌税梢徊úǖ谋嫖鲱}正在襲來,快快開啟防御,殺出重圍,來一場(chǎng)絕地反擊僵尸,啊,不對(duì),辨析三連發(fā)掃描了眾多的面試題,發(fā)現(xiàn)額各個(gè)技術(shù)之間的辨析真的是如僵尸一般,一波一波的相信不少人 HTML5學(xué)堂-碼匠:面試?yán)镒畛3霈F(xiàn)的問題句式大概就是說說XXX和XXX的區(qū)別談?wù)刋XX和XXX的不同了吧~!一波波的辨析題正在襲來,快快開啟防御,...

    ralap 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<