摘要:數據管理,包括數據邏輯數據請求數據存儲等功能。負責處理的事件,并更新也負責監聽的變化,并更新,控制其他的所有流程。上面代碼就是一個最簡單的類,構造函數創建出來的對象自身有屬性,其原型上面有一個屬性。
JS題目總結:原型鏈/new/json/MVC/Promise 1原型鏈相關
解讀:
上圖中,Object,Function,Array,Boolean都是構造函數
第一個框:
object是實例對象,他的模板對象(原型對象)在Object()構造函數里面.
構造函數.prototype指向的是原型對象,即模板對象.
由構造函數構造出來的實例對象.__proto__也指向的是原型對象,即模板對象.
所以true.
第二個框:
fn是一個實例函數,是由用來構造出函數的構造函數造出來的.
所以fn.__proto__ === Function.prototype
任何構造函數.prototype都是一個對象.
因為fn.__proto__ === Function.prototype
所以fn.__proto__.__proto__ === Object.prototype等價于
Function.prototype.__proto__ === Object.prototype
等價于
一個對象.__proto__ === Object.prototype
所以是true
第三個框同理.
第四個框比較難理解:
一個實例函數是由用來構造出函數的構造函數造出來的.
Object,Function,Array都是一個實例函數,函數也是一種類型,就像String是一種類型,Number是一種類型一樣,函數這個類型里的實例函數由函數的構造函數造出來!很難理解
所以實例函數.__proto__===構造函數.prototype
實例函數的構造函數就是Function
有點雞生蛋蛋生雞的感覺.
第五個框同理
2面向對象,new,原型鏈相關function fn(){ console.log(this) } new fn()
new fn() 會執行 fn,并打印出 this,請問這個 this 有哪些屬性?這個 this 的原型有哪些屬性?
答:
這個this就是new創建的新對象.
this(這個新對象)有__protot__屬性,它指向fn構造函數的原型即fn.prototype
這個原型(即fn.prototype)有兩個屬性:
construct :它的值是構造函數fn
__proto__: 它指向Object.prototype
解讀:
fn()是構造函數
new fn()就是一個構造函數new出來的新對象.
他的自有屬性為空,共有屬性為空,因為都沒有設置
因為他的自有屬性為空,所以他只有一個__proto__指向構造函數.prototype(即原型)了.
共有屬性為空,所以他的原型就是只有constructor指向構造函數和__proto__指向Object.prototype(因為原型本身就是對象類型,所以指向對象的構造函數)
例子:
JSON 和 JavaScript 是什么關系?
JSON 和 JavaScript 的區別有哪些?
關系:JSON 是一門抄襲/借鑒 JavaScript 的語言,同時也是一種數據交互格式,JSON 是 JavaScript 的子集(或者說 JSON 只抄襲了一部分 JavaScript 語法,而且沒有新增任何原創的語法)
區別:JSON 不支持函數、undefined、變量、引用、單引號字符串、對象的key不支持單引號也不支持不加引號、沒有內置的 Date、Math、RegExp 等。
而 JavaScript 全都支持。
前端 MVC 是什么?(10分)
請用代碼大概說明 MVC 三個對象分別有哪些重要屬性和方法。(10分)
答一:
MVC 是什么 MVC 是一種設計模式(或者軟件架構),把系統分為三層:Model數據、View視圖和Controller控制器。
Model 數據管理,包括數據邏輯、數據請求、數據存儲等功能。前端 Model 主要負責 AJAX 請求或者 LocalStorage 存儲
View 負責用戶界面,前端 View 主要負責 HTML 渲染。 Controller 負責處理 View 的事件,并更新
Model;也負責監聽 Model 的變化,并更新 View,Controller 控制其他的所有流程。
答二:
MVC就是把代碼分為三塊
V(view)只負責看得見的東西.
M(model)只負責跟數據相關的操作,不會出現DOM,不會出現任何的html/css操作.例如model里只會有初始化數據庫,獲取數據方法fetch(),保存數據的方法save()
C(controller)只負責把這些view和model組合起來,找到view,找到model,使用model完成數據修改業務,并修改view的顯示
V:視圖
M:數據
C:控制器
MVC是一種代碼組織形式,不是任何一種框架,也不是任何一種技術,只是組織代碼的思想,要做的就是V和M傳給C,C去統籌
在js里,MVC分別由三個對象去擔任三個職責
代碼一:
window.View = function(xxx){ return document.querySelector(xxx); }
window.Model = function(object){ let resourceName = object.resourceName; return { init: function () { }, fetch: function () { }, save: function (object) { } } }
window.Controller = function(options){ var init = options.init; let object = { view:null, model:null, init:function(view,model){ this.view = view; this.model = model; this.model.init(); init.call(this,view,model); this.bindEvents(); }, bindevnets:function(){}, }; for (let key in options) { if(key !=="init"){ object[key] = options[key] } }; return object; }
代碼二:
var model = { data: null, init(){} fetch(){} save(){} update(){} delete(){} } view = { init() {} template: "5 ES5類,原型鏈,構造函數,newhi
} controller = { view: null, model: null, init(view, model){ this.view = view this.model = model this.bindEvents() } render(){ this.view.querySelector("name").innerText = this.model.data.name }, bindEvents(){} }
如何在 ES5 中如何用函數模擬一個類?(10分)
答一:
使用原型對象,構造函數,new來模擬類.
將公共屬性放到原型對象里,并且將構造函數的prototype屬性指向原型對象.
私有屬性(自有屬性)放到構造函數里去定義.
將實例化的對象的__proto__指向原型對象.
這樣當構造函數創建一個實例化的對象的時候,就即擁有自己的私有變量和方法,也有公有的變量和方法了,實例化出來的對象的私有方法和變量修改都不會互相有影響,只有在修改公有的變量和方法的時候是對所有實例生效的
答二:
ES 5 沒有 class 關鍵字,所以只能使用函數來模擬類。
function Human(name){ this.name = name } Human.prototype.run = function(){} var person = new Human("frank")
上面代碼就是一個最簡單的類,Human 構造函數創建出來的對象自身有 name 屬性,其原型上面有一個 run 屬性。
Promise用過 Promise 嗎?舉例說明。
如果要你創建一個返回 Promise 對象的函數,你會怎么寫?舉例說明。
答:
用過Promise答一:
用過 Promise,比如 jQuery 或者 axios 的 AJAX 功能,都返回的是 Promise 對象。
$.ajax({url:"/xxx", method:"get"}).then(success1, error1).then(success2, error2)
答二:
用過.例如使用jQuery的Ajax()發送請求,成功或失敗后的回調函數,就是使用promise封裝的
function success(responseText){ console.log("成功") console.log(responseText);//responseTex } function fail(request){ console.log("失敗") console.log(request); } myButton.addEventListener("click",(e)=>{ //使用ajax $.ajax({ method:"post", url:"/xxx", data:"username=mtt&password=1", dataType:"json"http://預期服務器返回的數據類型,如果不寫,就是響應里設置的 } ).then(success,fail)//$.ajax()返回一個promise })寫Promise
function xxx(){ return new Promise((f1, f2) => { doSomething() setTimeout(()=>{ if(success){ f1(); }else{ f2(); } },3000) }) } 調用方法: xxx().then(success, fail)
或者:
function asyncMethod(){ return new Promise(function (resolve, reject){ setTimeout(function(){ 成功則調用 resolve 失敗則調用 reject },3000) }) }
可以看看我的博客__使用Promise封裝Ajax
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108452.html
摘要:雖然在腳本中沒有標準的方式訪問,但在每個對象上都支持一個屬性,用于訪問其構造函數的原型對象。說的是構造函數和原型對象之間的關系,說的是實例對象和原型對象之間的關系。 前言 在 segmentfault 上看到這樣一道題目: var F = function(){}; Object.prototype.a = function(){}; Function.prototype.b = fu...
摘要:好吧,我承認太標題黨了,這篇文章是通過一道前端面試題引出的純技術討論。我先要矯情無比的從中外詩歌說起。這一星期陸陸續續面試了不少于個人,其中不乏工作履歷突出的候選者。這樣做的問題在于循環并沒有要求枚舉對象的修改與當前循環保持一致。 好吧,我承認太標題黨了,這篇文章是通過一道前端面試題引出的純技術討論。我先要矯情無比的從中外詩歌說起。 傳統的佛學經典里,被世人熟知的有這樣一句話:一花一世...
摘要:好吧,我承認太標題黨了,這篇文章是通過一道前端面試題引出的純技術討論。我先要矯情無比的從中外詩歌說起。這一星期陸陸續續面試了不少于個人,其中不乏工作履歷突出的候選者。這樣做的問題在于循環并沒有要求枚舉對象的修改與當前循環保持一致。 好吧,我承認太標題黨了,這篇文章是通過一道前端面試題引出的純技術討論。我先要矯情無比的從中外詩歌說起。 傳統的佛學經典里,被世人熟知的有這樣一句話:一花一世...
摘要:在掘金上看到了一位大佬發了一篇很詳細的面試記錄文章一年半經驗,百度有贊阿里面試總結,為了查漏補缺,抽空就詳細做了下。 在掘金上看到了一位大佬發了一篇很詳細的面試記錄文章-《一年半經驗,百度、有贊、阿里面試總結》,為了查漏補缺,抽空就詳細做了下。(估計只有我這么無聊了哈哈哈) 有給出的或者有些不完善的答案,也盡力給出/完善了(可能有錯,大家自行辨別)。有些很困難的題目(例如實現Promi...
摘要:在掘金上看到了一位大佬發了一篇很詳細的面試記錄文章一年半經驗,百度有贊阿里面試總結,為了查漏補缺,抽空就詳細做了下。 在掘金上看到了一位大佬發了一篇很詳細的面試記錄文章-《一年半經驗,百度、有贊、阿里面試總結》,為了查漏補缺,抽空就詳細做了下。(估計只有我這么無聊了哈哈哈) 有給出的或者有些不完善的答案,也盡力給出/完善了(可能有錯,大家自行辨別)。有些很困難的題目(例如實現Promi...
閱讀 3483·2021-11-18 10:02
閱讀 1612·2021-10-12 10:12
閱讀 2990·2021-10-09 09:53
閱讀 4858·2021-09-09 09:34
閱讀 847·2021-09-06 15:02
閱讀 2777·2021-08-05 10:02
閱讀 3134·2019-08-30 15:44
閱讀 3120·2019-08-28 18:04