關於 javascript中原型和對象的在思考

首先確定,實例不能訪問到原型對象中的屬性和方法,不僅僅是因爲重寫原型對象切斷了構造函數與最初原型之間的聯繫。在《 javascript中原型和對象》中我提到過實例可以訪問重寫的原型對象的屬性和方法的情況。

function Person(){  
      
    }  
var person = new Person();  
  
Person.prototype = {  
    //constructor : Person,  
    name : 'zxs',  
    age : 24,  
    sayName : function(){alert(this.name)}  
    }  
      
person.sayName();  

以上代碼在實例化對象時構造函數的原型爲空,它沒有任何除默認屬性以外的屬性。重寫構造函數的原型確實切斷了構造函數與最初原型之間的聯繫。

在使用 new 操作符以後構造函數的原型對象中的屬性和方法已經添加到 person對象中。因爲以上方法爲函數原型添加新屬性和方法不具有動態性,所以person不能訪問到新添加的屬性和方法。

重寫原型對象之後,就如同如下代碼:

var o = {
	name : 'zxs'
	}
	
var obj = o;
o = {}
console.log(o.name); 
此時輸出的值是undefined,因爲,對象是一個引用類型,“=”是賦值操作符,並且其運算順序是從右往左。o={}就是說o的指向已經改變,是一個空對象。

Person.prototype.mothed = function() {}與Person.prototype={mothed:function(){}}的區別就如同 arr = []和arr.push()一樣,前者都是修改自身,後者是完全改變自身。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章