面向對象的語言有一個標誌,即擁有類的概念,抽象實例對象的公共屬性與方法,基於類能夠建立任意多個實例對象,通常具備封裝、繼承、多態的特性!但JS中對象與純面嚮對象語言中的對象是不一樣的,ECMA標準定義JS中對象:無序屬性的集合,其屬性能夠包含基本值、對象或者函數。能夠簡單理解爲JS的對象是一組無序的值,其中的屬性或方法都有一個名字,根據這個名字能夠訪問相映射的值(值能夠是基本值/對象/方法)。html
原型模式如類模式同樣,都是是一種編程泛型,即編程的方法論。另外最近大紅大紫的函數編程也是一種編程泛型。JavaScript之父Brendan Eich在設計JavaScript時,從一開始就沒打算爲其加入類的概念,而是借鑑了另外兩門基於原型的的語言:Self和Smalltalk。編程
既然同爲面嚮對象語言,那就得有建立對象的方法。在類語言中,對象基於模板來建立,首先定義一個類做爲對現實世界的抽象,而後由類來實例化對象;而在原型語言中,對象以克隆另外一個對象的方式建立,被克隆的母體稱爲原型對象。函數
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>js面向對象編程</title> </head> <body> <script> function Person(chexing,yanse,neishi){ this.chexing=chexing; this.yanse=yanse; this.neishi=neishi; this.che=function(){ console.log("你們好這是一輛"+this.chexing+",它的顏色是"+this.yanse+",它的內飾是"+this.neishi+"!") } } var yueye=new Person("牧馬人越野車","綠色的","簡約精緻的"); var paoche=new Person("法拉利跑車","紅色的","豪華舒暢的"); yueye.che(); paoche.che(); </script> </body> </html>