對於js的原型部分是學了忘,忘了學,不斷的重複。因此將本身的理解結合幾個簡單的例子來講明原型的簡單的用法,項目中用到的時候直接就能夠拿來用。(面試的時候仍是要去看別的大神洋洋灑灑的文字,我就不獻醜了。)面試
函數的 prototype 屬性是在函數做爲構造器使用的時候,做爲其構造對象的原型。
而只用經過new建立的函數,纔有prototype屬性。函數
prototype能夠添加屬性和方法。this
簡單來說:spa
function Person(name){ this.name=name; }; var person1=new Person('Byron'); Person.prototype.printName=function(){ alert(this.name); }; console.log(person1); //由於person1是經過new來建立的,因此具備prototype屬性,當Person又在後面添加一個函數的時候,person1一樣能夠訪問。也能夠說person1繼承了Person的原型(prototype)
可是若是咱們不去new,而是直接賦值:prototype
function Person(name){
this.name=name;
};
var person1=Person('Byron');
Person.prototype.printName=function(){
alert(this.name);
};
console.log(person1);
//由於person1是直接賦值的,沒有prototype屬性,因此就沒法繼承Person的屬性,打印結果就是undefined
一樣的,咱們給其添加其餘的屬性也是一樣的結果。code
每一個函數都有一個prototype屬性,這個屬性是指向一個對象的引用,這個對象稱爲原型對象,原型對象包含函數實例共享的方法和屬性,也就是說將函數用做構造函數調用(使用new操做符調用)的時候,新建立的對象會從原型對象上繼承屬性和方法。對象
大概就是這麼個意思。blog
var Client = function(){}; Client.prototype.subscribe = function(name) { this.name = name;
return this.name; } var test = new Client('測試'); test.subscribe('測試');