js 關於this new 原型

2021-09-07 08:41:19 字數 2003 閱讀 4166

1、this誤區

# 第三方學習

- this不是函式自身的引用,this實際上是在函式被呼叫時建立的乙個繫結,它指向什麼,完全是由函式呼叫者來決定的。

var person =function(name) ;

//例項化乙個person(通過new例項化時,此時的this指向alice這個物件.你可以列印出來測試一下)

var alice = new person('

alice');

// 不要這麼做!這個函式只會返回undefined,並且執行上下文是window(全域性)物件,你無意間建立了乙個全域性變數name。

person('

bob'); //

=> undefined

2、new、prototype的理解

#第三方教程

#幕課網:建立物件和原型鏈

var person = function () {};

var p = new person();

很簡單的一段**,我們來看看這個new究竟做了什麼?我們可以把new的過程等價於以下三步:

// 建立乙個空物件

1、var p = {};

// 可以通過執行 alert( p.__proto__ === person.prototype ) 來驗證。結果返回true

2、p.__proto__ = person.prototype;

// 通過這一步,p可以呼叫person中的屬性或函式

3、person.call(p);

當我們呼叫p.【屬性/方法】 的時候,首先p中沒有這個【屬性/方法】,如果沒有就會去__proto__中去找,也就是person.prototype

而這個 person.prototype 稱為 __proto__ 的原型

person.prototype事實上還有乙個原型:object.prototype,這個原型的作用是什麼呢?

我們注意到任何乙個物件都具有.tostring()等方法,這其實就是**於這個原型。

而 object.prototype 又指向了最終乙個原型,就是null。

這個過程就是原型鏈

3、js物件導向:例項方法和靜態方法

什麼是例項方法?簡單的來說就是必須例項化類物件才可以呼叫的方法,如:

var people= function

() {};

people.prototype =,

show:

function()}

//vm1008:1 uncaught typeerror: people.init is not a function(…)

people.init()

var p = new

people();

p.init();

什麼是靜態方法?不需要例項化類就可以直接呼叫,如:

var people = function

(){};

people.test = function

()people.test();

4、js的封裝閉包

(function

()})()

5、js的設計模式待整理...

js 關於this new 原型

1 this誤區 第三方學習 this不是函式自身的引用,this實際上是在函式被呼叫時建立的乙個繫結,它指向什麼,完全是由函式呼叫者來決定的。var person function name 例項化乙個person 通過new例項化時,此時的this指向alice這個物件.你可以列印出來測試一下 ...

關於js原型繼承

js的每個類都有乙個prototype物件 訪問物件的屬性時,會先訪問到物件自身是否有定義這個屬性 如果沒有定義,就會去訪問物件所屬型別的prototype物件是否有此屬性 原型繼承就是把型別的prototype指向乙個父類的新物件,這樣每派生乙個新類出來都會構造乙個新的父類物件作為原型,這個物件和...

js關於原型,原型鏈的面試題

之前面試的時候遇到過原型和原型鏈方面的題目,具體的已經忘了,只記得當時回答的稀里糊塗,今天查了一些資料,把自己所理解的寫出來,加深記憶。1,前提 在js中,物件都有 proto 屬性,一般這個是被稱為隱式的原型,該隱式原型指向構造該物件的建構函式的原型。函式比較特殊,它除了和其他物件一樣有 prot...