Javascript也是面向對象的語言,但它是一種基於原型Prototype的語言,而不是基於類的語言。在Javascript中,類和對象看起來沒有太多的區別。
1.什么是prototype:
function定義的對象有一個prototype屬性,prototype屬性又指向了一個prototype對象。在prototype對象中有一個constructor屬性,這個constructor屬性同樣指向一個constructor對象,而這個constructor對象恰恰就是這個function函數本身。 用偽代碼和圖表表示如下:
可以看出這里的prototype是鏈狀的。employee.prototype對象中的constructor屬性指向employee函數。
源碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<script>
function employee(name,jobtitle,born){
this.name=name; this.jobtitle=jobtitle; this.born=born; this.test = function(){ console.log("test...");} } var fred=new employee("Fred Flintstone","Caveman",1970); employee.prototype.salary=null; fred.salary=20000; document.write(fred.salary); </script> </body> </html>
2.prototype的作用:
prototype允許我們在創建對象之后來改變對象或類的行為,並且這些通過prototype屬性添加的字段或方法所有對象實例是共享的。