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

來源:互聯網
上載者:User

首先確定,執行個體不能訪問到原型對象中的屬性和方法,不僅僅是因為重寫原型對象切斷了建構函式與最初原型之間的聯絡。在《 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的指向已經改變,是一個Null 物件。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.