理解js原型和原型鏈

2021-07-09 12:35:37 字數 2521 閱讀 8696

一. 普通物件和函式物件:

js中,萬物皆物件,大體分為兩種:普通物件,函式物件。凡是通過new function()建立的都是函式物件,其他的則為普通物件。

下面舉例說明:

function

fun1

(){}; //function

var fun2 = function

(){}; //function

var fun3 = new

function

("formalparameter","console.log(formalparameter);");

//function

var object1 = new fun1(); //object

var object2 = ; //object

var object3 = new object(); //object

二. 原型物件

在js中,每定義乙個物件(函式)時,物件中都包含一些預定義的屬性,其中函式物件的乙個屬性就是原型物件」prototype」。普通物件沒有prototype屬性,但是有 「proto「屬性。

原型物件其實就是普通物件,但是function.prototype除外,他是函式物件,並且沒有prototype屬性。

function

foo(){};

console.log(typeof(foo)); //function

console.log(typeof(foo.prototype)); //object

console.log(typeof(function.prototype)); //function

console.log(typeof(object.prototype)); //object

console.log(typeof(function.prototype.prototype)); //undefined

foo.prototype是foo的乙個例項化物件,當建立foo時,同時建立了foo的例項化物件並且賦值給foo的prototype,基本過程如下:

var temp = new foo();

foo.prototype = temp;

所以,function.prototype為什麼是函式物件就明了了。

var temp = new

function

();function.prototype = temp;

原型物件的主要用途:繼承。

function

parent

(username)

parent.prototype.hello = function

()function

child

(username,password)

child.prototype = new

parent();

child.prototype.pass = function

()//測試

varparent = new

parent("zhangsan");

var child = new child("lisi","123456");

parent.hello();

child.hello();

child.pass();

console.log(child instanceof(parent));

三. 原型鏈

js在建立(普通/函式)物件時,都有乙個」proto「內建物件,用於指向建立他的函式物件的原型物件prototype。

console.

log(parent

.__prpto__ ===

parent

.prototype); //true

console.

log(parent

.prototype.__proto__ === object.prototype)//true

console.

log(object.prototype.__proto__) //null

四.記憶體構造

五.constructor

原型物件prototype中都有預定義的constructor屬性,用來引用他的函式物件。

js 原型 原型鏈理解

執行發現如下 自定義乙個函式,函式包含兩個關鍵資料 prototype,proto 1 原型 prototype person具有prototype屬性 包含我們定義的屬性name,age以及constructor,並且constructor指向我們的person函式,可以理解為prototype就...

js的原型和原型鏈理解

以以下 為例 let arr 1,3,2,0 arr.reverse arr.tostring 我們使用console.dir arr 命令 發現arr.proto 屬性上有reverse 和tostring 方法了 用console.dir arr 發現,arr不僅有我們定義的四個值,其proto...

JS原型和原型鏈

建立建構函式 function word words word.prototype 建立例項 var w new word hello world w.print function w.print hello world w.alert hello world function.prototype....