一. 普通物件和函式物件:
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....