成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JS薄弱點(diǎn)記錄

kgbook / 2088人閱讀

摘要:的值為對(duì)象使用構(gòu)造函數(shù)調(diào)用函數(shù)如果函數(shù)調(diào)用前使用了關(guān)鍵字,則是調(diào)用了構(gòu)造函數(shù)?;陬惖幕谠偷亩x類定義原型對(duì)象定義類的構(gòu)造函數(shù)定義對(duì)象的構(gòu)造函數(shù)實(shí)例化對(duì)象將構(gòu)造函數(shù)關(guān)聯(lián)到原型實(shí)例化對(duì)象注意中引入的概念依然是基于原型的原理。

一、函數(shù)定義

JS使用關(guān)鍵字function定義函數(shù),有三種定義方式(有時(shí)候也說有三種聲明方式)。
1.函數(shù)聲明

function functionName(parameters) {
     //執(zhí)行代碼
}
注意:函數(shù)聲明后不會(huì)立即執(zhí)行,在需要的時(shí)候調(diào)用。

2.函數(shù)表達(dá)式

 var x = function(a,b) {return a+b;}//匿名函數(shù),函數(shù)存儲(chǔ)在變量x中
 var z = x(4,3);//通過變量名x來調(diào)用匿名函數(shù)

3.Function()構(gòu)造函數(shù)/函數(shù)對(duì)象
即,通過內(nèi)置的JS函數(shù)構(gòu)造器(Function())定義

var addFunction = new Function("a","b","return a+b");
var res = addFunction(3,4);//調(diào)用

注意:new Function("a","b","return a+b")是不對(duì)的,會(huì)產(chǎn)生如下錯(cuò)誤:


☆ 在實(shí)際使用中,盡量避免使用new關(guān)鍵字,所以第3種方法不常用。
JavaScript是一種prototypical(原型)類型語言,在創(chuàng)建之初,是為了迎合市場(chǎng)的需要,讓人們覺得它和Java是類似的,才引入了new關(guān)鍵字。Javascript本應(yīng)通過它的Prototypical特性來實(shí)現(xiàn)實(shí)例化和繼承,但new關(guān)鍵字讓它變得不倫不類。

二、函數(shù)調(diào)用

JS函數(shù)有4中調(diào)用方式,每種方式的不同在于this的初始化。
函數(shù)中的代碼在函數(shù)被調(diào)用后執(zhí)行。
1.作為一個(gè)函數(shù)調(diào)用

function myFunc(a,b) {
    return a + b;
}
myFunc(3,4); //返回20,在瀏覽器的控制臺(tái)才能看到該輸出

myFunc函數(shù)不屬于任何對(duì)象,但是JS默認(rèn)它是全局對(duì)象。
在HTML中,默認(rèn)全局對(duì)象是HTML頁面本身,因此函數(shù)myFunc屬于HTML頁面。
在瀏覽器中,頁面對(duì)象是瀏覽器窗口(Window 對(duì)象),即myFunc自動(dòng)變?yōu)閣indow對(duì)象。
即,myFunc()和window.myFunc()一樣。
注意:這是函數(shù)調(diào)用的常用方法,但是不是良好的變成習(xí)慣。全局變量、方法或者函數(shù)容易造成命名沖突的bug。

2.函數(shù)作為方法調(diào)用
即,將函數(shù)定義為對(duì)象的方法。

var myObject = {
    firstName:"John",//對(duì)象myObject的屬性
    lastName: "Doe",//屬性
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }//方法
}
myObject.fullName();         // 返回 "John Doe"

fullName方法是一個(gè)函數(shù),函數(shù)屬于對(duì)象myObject。
this的值為myObject對(duì)象

3.使用構(gòu)造函數(shù)調(diào)用函數(shù)
如果函數(shù)調(diào)用前使用了new關(guān)鍵字,則是調(diào)用了構(gòu)造函數(shù)。

// 構(gòu)造函數(shù):
function myFunction(arg1, arg2) {
    this.firstName = arg1;//構(gòu)造函數(shù)中的this關(guān)鍵字沒有任何值,其值在函數(shù)調(diào)用實(shí)例化對(duì)象(new object)時(shí)創(chuàng)建。
    this.lastName  = arg2;
}
 
// 構(gòu)造函數(shù)的調(diào)用會(huì)創(chuàng)建一個(gè)新的對(duì)象,新對(duì)象會(huì)繼承構(gòu)造函數(shù)的屬性和方法
var x = new myFunction("John","Doe");
x.firstName;                             // 返回 "John"

4.作為函數(shù)方法調(diào)用函數(shù)
JS中,函數(shù)是對(duì)象,有它的屬性和方法
call()和apply()是預(yù)定義的函數(shù)方法,兩個(gè)方法可用于調(diào)用函數(shù),兩個(gè)方法的第一個(gè)參數(shù)必須是對(duì)象本身。

function myFunc(a, b) {
    return a * b;
}
myObj = myFunc.call(myObj, 10, 2);     // 返回 20  //call從call的第二個(gè)參數(shù)傳入函數(shù)的參數(shù)
function myFunc(a, b) {
    return a * b;
}
myArray = [10, 2];
myObj = myFunction.apply(myObj, myArray);  // 返回 20  //apply傳入?yún)?shù)數(shù)組

在 JavaScript 嚴(yán)格模式(strict mode)下, 在調(diào)用函數(shù)時(shí)第一個(gè)參數(shù)會(huì)成為 this 的值, 即使該參數(shù)不是一個(gè)對(duì)象,比如,傳入null和undefined也會(huì)保持原樣不被轉(zhuǎn)換為window對(duì)象。

在 JavaScript 非嚴(yán)格模式(non-strict mode)下, 如果第一個(gè)參數(shù)的值是 null 或 undefined, 它將使用全局對(duì)象替代

三、關(guān)鍵字this的理解

函數(shù)在運(yùn)行時(shí),在函數(shù)內(nèi)部自動(dòng)生成的一個(gè)對(duì)象,只能在函數(shù)內(nèi)部使用個(gè)。一般來說,JS中,this指向函數(shù)執(zhí)行時(shí)的當(dāng)前對(duì)象。
函數(shù)沒有被自身的對(duì)象調(diào)用時(shí),this的值就會(huì)變成全局對(duì)象(瀏覽器中是瀏覽器窗口,window對(duì)象)
總結(jié):隨著函數(shù)使用場(chǎng)合的不同,this 的值會(huì)發(fā)生變化。但是有一個(gè)總的原則,那就是this指的是,調(diào)用函數(shù)的那個(gè)對(duì)象。

function myFunc(){
   return this;
}
myFunc();//[object Window]

情況1.純粹的函數(shù)調(diào)用
全局性調(diào)用,this代表全局對(duì)象。

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

情況2.作為對(duì)象方法的調(diào)用
當(dāng)函數(shù)作為某個(gè)對(duì)象的方法調(diào)用時(shí),this指的就是這個(gè)上級(jí)對(duì)象。

function test() {
    console.log(this.x);
}

var obj = {};
obj.x = 1;
obj.m = test;

obj.m(); //1

情況3.作為構(gòu)造函數(shù)調(diào)用
構(gòu)造函數(shù)是什么呢?
——就是通過這個(gè)構(gòu)造函數(shù),可以生成一個(gè)新的對(duì)象。
此時(shí),this就是這個(gè)新的對(duì)象。

function test() {
   this.x = 1;
}//構(gòu)造函數(shù)

var obj = new test();//通過構(gòu)造函數(shù)生成一個(gè)新對(duì)象
obj.x;//1

分析:

var x = 2;//創(chuàng)建一個(gè)全局變量

function test() {
   this.x = 1;
}//構(gòu)造函數(shù)

var obj = new test();//通過構(gòu)造函數(shù)生成一個(gè)新對(duì)象
console.log(obj.x);//1

console.log(x); //2

x的運(yùn)行結(jié)果為2,說明全局變量x的值并沒有改變.
情況4.apply調(diào)用
apply()是函數(shù)的一個(gè)方法,作用是改變函數(shù)的調(diào)用對(duì)象。第一個(gè)參數(shù)就表示改變后的調(diào)用這個(gè)函數(shù)的對(duì)象。也就是this指的就是apply的第一個(gè)參數(shù)。
當(dāng)apply的參數(shù)為空的時(shí)候,默認(rèn)調(diào)用全局對(duì)象。

var x = 0;
function test() {
   console.log(this.x);
}

var obj = {};
obj.x = 1;
obj.m = test;
obj.m.apply();//0  //this指的是全局變量
obj.m.apply(obj);//1 //this指的是obj
四、數(shù)據(jù)類型

見文章“JS重要知識(shí)點(diǎn)記錄(一)”

五、cookie

Cookie用于存儲(chǔ)web頁面的用戶信息。是一些數(shù)據(jù),存儲(chǔ)于電腦上的文本文件中。
當(dāng)web服務(wù)器向?yàn)g覽器發(fā)送web頁面時(shí),在連接關(guān)閉后,服務(wù)端不會(huì)記錄用戶的信息。而Cookie的作用就是用于解決“如何記錄客戶端的用戶信息”:

當(dāng)用戶訪問web頁面時(shí),他的名字可以記錄在Cookie中。

當(dāng)用戶下一次訪問該頁面時(shí),可以在cookie中讀取用戶訪問記錄。

Cookie以名/值對(duì)形式存儲(chǔ),如下所示:

username = Joy Ann

當(dāng)瀏覽器從服務(wù)器上請(qǐng)求web頁面時(shí),屬于該頁面的Cookie會(huì)被添加到該請(qǐng)求中。服務(wù)端通過這種方式來獲取用戶的信息。

六、面向?qū)ο螅↗S的基于原型與Java的基于類的區(qū)別)

基于類的面向?qū)ο笳Z言:Java和C++,是構(gòu)建在兩個(gè)不同實(shí)體的概念之上:類和實(shí)例。
類(class):一類抽象的事物,定義了這類事物的屬性(即方法和變量)
實(shí)例(instance):類的一個(gè)成員。實(shí)例具有父類所有的屬性,還可以包括自身獨(dú)有的屬性。
基于原型的語言不存在類和實(shí)例的區(qū)別:只有對(duì)象。

基于類的 基于原型的
1.定義類 1.定義原型對(duì)象
2.定義類的構(gòu)造函數(shù) 2.定義對(duì)象的構(gòu)造函數(shù)
3.實(shí)例化對(duì)象 3.將構(gòu)造函數(shù)關(guān)聯(lián)到原型
4.實(shí)例化對(duì)象

注意:ES6中引入的class概念依然是基于原型的原理。
推薦一篇描述很清晰的文章:https://segmentfault.com/a/11...
小結(jié)一下:

1、prototype 就是函數(shù)的一個(gè)屬性
2、prototype屬性本身也是一個(gè)對(duì)象
3、當(dāng)我們把一個(gè)函數(shù)Foo()當(dāng)做構(gòu)造器來創(chuàng)建一個(gè)新的對(duì)象f = new Foo()的時(shí)候,新對(duì)象f就可以訪問到Foo()函數(shù)的prototype對(duì)象中的屬性
4、new在創(chuàng)建一個(gè)新的對(duì)象f的時(shí)候,會(huì)賦予新對(duì)象f一個(gè)屬性(_proto_)指向構(gòu)造器的 prototype 屬性
5、當(dāng)訪問一個(gè)對(duì)象的屬性(包括方法)時(shí),首先查找這個(gè)對(duì)象自身有沒有該屬性,如果沒有就查找它的原型(也就是 proto 指向的 prototype 對(duì)象),如果還沒有就查找原型的原型(prototype 也有它自己的 __proto__,指向更上一級(jí)的 prototype 對(duì)象),依此類推一直找到 Object 為止
6、一個(gè)對(duì)象,它有許多屬性,其中有一個(gè)屬性指向了另外一個(gè)對(duì)象的原型屬性;而后者也有一個(gè)屬性指向了再另外一個(gè)對(duì)象的原型屬性。這就像一條一環(huán)套一環(huán)的鎖鏈一樣,并且從這條鎖鏈的任何一點(diǎn)尋找下去,最后都能找到鏈條的起點(diǎn),即 Object;因此,我們也把這種機(jī)制稱作:原型鏈。
7、既然 proto 可以訪問到對(duì)象的原型,那么為什么禁止在實(shí)際中使用呢?
這是一個(gè)設(shè)計(jì)上的失誤,導(dǎo)致 proto 屬性是可以被修改的,同時(shí)意味著 JavaScript 的屬性查找機(jī)制會(huì)因此而“癱瘓”,所以強(qiáng)烈的不建議使用它。

七、常用庫——JQuery

測(cè)試 JavaScript 庫(即引用它):


主要的 jQuery 函數(shù): $() 函數(shù)(jQuery 函數(shù))
比較使用JS語法和JQuery語法實(shí)現(xiàn)同一個(gè)功能的區(qū)別:

//JS方式
function myFunction()
{
var obj=document.getElementById("h01");
obj.innerHTML="Hello jQuery";
}
onload=myFunction;
//JQuery方式
function myFunction()
{
$("#h01").html("Hello jQuery");
}
$(document).ready(myFunction);//注意JQuery返回的是JQuery對(duì)象,因而不能使用HTML DOM對(duì)象的屬性或方法

JQuery允許鏈接,即鏈?zhǔn)秸Z法。

function myFunction() {
     $(#id1).attr("style","color:red").html("hello JQuery")
}
八、常用框架

Vue

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/100653.html

相關(guān)文章

  • 前端筆試題面試題記錄(下)

    摘要:前言接上篇前端筆試題面試題記錄上。默認(rèn)值,不脫離文檔流,,,,等屬性不生效。。不脫離文檔流,依據(jù)自身位置進(jìn)行偏離,當(dāng)子元素設(shè)置,將依據(jù)它進(jìn)行偏離。。 前言 接上篇前端筆試題面試題記錄(上)。趁清明小長(zhǎng)假,把上篇剩下的部分也寫一下,因?yàn)樽罱容^忙這篇已經(jīng)拖了很久了?,F(xiàn)在剛剛開始銀四了,應(yīng)該還是有些小伙伴在找工作,時(shí)間還不算太晚,希望本篇可以幫到這些小伙伴。 個(gè)人博客了解一下:obkoro...

    Lin_YT 評(píng)論0 收藏0
  • 前端筆試題面試題記錄(下)

    摘要:前言接上篇前端筆試題面試題記錄上。默認(rèn)值,不脫離文檔流,,,,等屬性不生效。。不脫離文檔流,依據(jù)自身位置進(jìn)行偏離,當(dāng)子元素設(shè)置,將依據(jù)它進(jìn)行偏離。。 前言 接上篇前端筆試題面試題記錄(上)。趁清明小長(zhǎng)假,把上篇剩下的部分也寫一下,因?yàn)樽罱容^忙這篇已經(jīng)拖了很久了?,F(xiàn)在剛剛開始銀四了,應(yīng)該還是有些小伙伴在找工作,時(shí)間還不算太晚,希望本篇可以幫到這些小伙伴。 個(gè)人博客了解一下:obkoro...

    suemi 評(píng)論0 收藏0
  • 以太坊合約的安全性弱點(diǎn),你都繞開了嗎 III

    摘要:新年前,我們最后來談一談以太坊安全性的特點(diǎn)。以太坊使用了一個(gè)硬分叉解決了這一問題。合約擁有者利用函數(shù)的異常處理和調(diào)用棧大小限制進(jìn)行攻擊。結(jié)語通過這幾期對(duì)參考文獻(xiàn)的學(xué)習(xí),我們看到了一些以太坊合約中設(shè)計(jì)的弱點(diǎn)。 新年前,我們最后來談一談以太坊安全性的特點(diǎn)。 不可能修改的bug 當(dāng)合約公開在區(qū)塊鏈上之后,它就不能去修改了。相應(yīng)的,合約中出現(xiàn)的任何 bug 也沒有機(jī)會(huì)改正。如果希望能夠修改bu...

    qqlcbb 評(píng)論0 收藏0
  • 以太坊合約的安全性弱點(diǎn),你都繞開了嗎 III

    摘要:新年前,我們最后來談一談以太坊安全性的特點(diǎn)。以太坊使用了一個(gè)硬分叉解決了這一問題。合約擁有者利用函數(shù)的異常處理和調(diào)用棧大小限制進(jìn)行攻擊。結(jié)語通過這幾期對(duì)參考文獻(xiàn)的學(xué)習(xí),我們看到了一些以太坊合約中設(shè)計(jì)的弱點(diǎn)。 新年前,我們最后來談一談以太坊安全性的特點(diǎn)。 不可能修改的bug 當(dāng)合約公開在區(qū)塊鏈上之后,它就不能去修改了。相應(yīng)的,合約中出現(xiàn)的任何 bug 也沒有機(jī)會(huì)改正。如果希望能夠修改bu...

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

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

0條評(píng)論

閱讀需要支付1元查看
<