Js小知識(shí)2

js 構(gòu)造函數(shù)

<h1>目前最流行的自定義</h1>
先說(shuō)一下構(gòu)造函數(shù)執(zhí)行過(guò)程
new 的作用
創(chuàng)建一個(gè)對(duì)象,將函數(shù)作用域賦予這個(gè)的對(duì)象,執(zhí)行構(gòu)造函數(shù)代碼,返回新對(duì)象

function Createfun(a,b){
    this.a=a;
    this.b=b;
    this.m=[1,2,3]  
}
Createfun.prototype={ //重寫(xiě)原型對(duì)象
    constructor:Createfun,
    geta:function(){
        alert(this.a);
    }
}
//增加原型方法
Createfun.prototype.geta=function(){alert(this.a)}

//通過(guò)檢查某個(gè)方法是否存在檢查是否需初始化原型

function Createfun(){
    this.a=a;
    this.b=b;
    if(typeof this.geta !="function"){
        Createfun.prototype.geta=function(){alert(this.a)};
    }
}

js 繼承
<H1>實(shí)現(xiàn)繼承主要是通過(guò)js的原型鏈來(lái)實(shí)現(xiàn)的</H1>

<h2>原型和原型鏈</h2>

<span>用例子來(lái)說(shuō)明</span>

function f1(){
    .....
}
var f=new f1();

<textarea>
每個(gè)函數(shù)都包含一個(gè)prototype屬性
原型對(duì)象都包含一個(gè)constructor屬性 值為指針

函數(shù)與原型對(duì)象之間的關(guān)系
prototype 指向原型對(duì)象 f1 Prototype

f1 Prototype中的constructor指向 f1

實(shí)例與原型對(duì)象之間的關(guān)系
實(shí)例對(duì)象上都包含一個(gè)[[Prototype]]//proto
指向原型對(duì)象

f 存在一個(gè)proto指向 f1 Prototype
</textarea>

這時(shí)如果來(lái)一個(gè)

function f2(){
.....
}
f2.prototype=new f1();

將f1的實(shí)例復(fù)制給f2 prototype//此處實(shí)際是重寫(xiě)f2的原型對(duì)象
//增加的話 是f2.prototype.xx=function(){};

此時(shí) f2Prototype變成了f1的一個(gè)實(shí)例
那么f2Prototype中也有了proto 指向 創(chuàng)建它的構(gòu)造函數(shù)的原型對(duì)象 也就是f1.Prototype

這時(shí)

var instance_f2=new f2();
instance_f2既可以訪問(wèn)f2的原型對(duì)象的屬性方法 也可以訪問(wèn)f1的原型對(duì)象的屬性方法

另外 所有函數(shù)的原型都是Object的實(shí)例
可以稱Object為頂層原型對(duì)象

Js 閉包
閉包就是函數(shù)中包含函數(shù),被包含的函數(shù)能夠訪問(wèn)包含函數(shù)的作用域。

function Cover(){
        var cover_a="111";

        var bibao_fun=function(){
            alert(cover_a);
        }
    }

閉包常用語(yǔ)創(chuàng)建私有作用域

function Cover(){
//私有變量 
        var cover_a=1;

        var bibao_fun=function(){
            alert(cover_a);
        }
//公有函數(shù)訪問(wèn)私有變量
        this.publicfun=function(){
            cover_a++;
            bibao_fun();
            alert(cover_a);
        }
    }
var test1=new Cover();
console.log(test1.cover_a)//error
test1.publicfun();//right,2
var test2=new Cover();
test2.publicfun();//right,2
//私有變量非靜態(tài)

創(chuàng)建靜態(tài)私有變量

創(chuàng)建塊級(jí)作用域

(function(){
        var private1=1;
        function privatefun(){
            return private1;
        }
        Private=function(){ //創(chuàng)建了全局變量 ,私有變量在調(diào)用后會(huì)立即銷毀,除非其賦予全局變量或在函數(shù)中使用

        };
        Private.prototype.publicfun=function(){
            private1++; //被使用
            return privatefun();
        }
    })()
    var p1=new Private();
    var result1=p1.publicfun();
    var p2=new Private();
    var result2=p2.publicfun();
    console.log(result1);//2
    console.log(result2);//3

單實(shí)例對(duì)象模塊模式

var singleobj=function(){
        var private1=1;
        function privatefun(){
            return private1;
        }
        var newobj=new Object();
        newobj.newpro=11;
        newobj.newfun=function(){
            private1++;
            return privatefun();
        }
        return newobj;
    }();
    console.log(singleobj.newfun());//2
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、 JS面向?qū)ο缶幊?1、 面向?qū)ο蠼榻B 什么是對(duì)象? Everything is object (萬(wàn)物皆對(duì)象)...
    寵辱不驚丶?xì)q月靜好閱讀 912評(píng)論 0 2
  • JS中原型鏈,說(shuō)簡(jiǎn)單也簡(jiǎn)單。 首先明確: 函數(shù)(Function)才有prototype屬性,對(duì)象(除Object...
    前小白閱讀 4,071評(píng)論 0 9
  • 一切皆對(duì)象 js中的一個(gè)常見(jiàn)運(yùn)算符 typeof 以上代碼列出了 typeof 輸出的集中類型標(biāo)識(shí), 其中上面的四...
    無(wú)跡落花閱讀 2,092評(píng)論 0 5
  • 香煙 咖啡 色情雜志 兩分鐘 五分鐘 34頁(yè) 太陽(yáng)傘頭頂?shù)囊訕?shù) 沙灘上的比基尼女郎 可以看見(jiàn)航船的無(wú)邊海 一只黑...
    關(guān)馨仁閱讀 261評(píng)論 0 1
  • 今天的天氣特別好,晌午的太陽(yáng)照得人暖暖的,老媽的精神似乎還不錯(cuò),靜靜地躺在院子中間,我蹲在身旁,一邊按摩她那只嚴(yán)重...
    三葉草85閱讀 224評(píng)論 0 0

友情鏈接更多精彩內(nèi)容