日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

当对象与原型有相同的属性,调用时的上下文指向问题

發布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 当对象与原型有相同的属性,调用时的上下文指向问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

在查閱對象自定義事件及其觸發實現的過程中,發現了如下代碼:

即:構造函數的原型可以是其他構造方法new出來的對象實例,雖然理解構造函數原型就是一個對象,但通常都是用對象直接量來指定,如:F.prototype ={},這種用法,引起了一些思考:如果原型對象和構造函數定義了完全相同的屬性,那么原型方法調研時,作用域是原型對象還是新的對象?為此,做了一下驗證:

function ancestor(){this.name ='default';this.age = 18;}ancestor.prototype = {printInfo:function(){console.log( this.name + "," + this.age );}};function parent( _name,_age ){this.name = _name;this.age = _age;}parent.prototype = new ancestor();var o1 = new parent('tester',20);var o2 = new parent();console.log( o1 );console.log( o2 );

打印結果如下:

可見,對象原型和對象自身,都保留了各自的'name'和'age'屬性,繼續調用對象o1,o2繼承自原型的printInfo方法,代碼如下:

function ancestor(){this.name ='default';this.age = 18;}ancestor.prototype = {printInfo:function(){console.log( this.name + "," + this.age );}};function parent( _name,_age ){this.name = _name;this.age = _age;}parent.prototype = new ancestor();var o1 = new parent('tester',20);var o2 = new parent();console.log('o1-----:');console.log( o1 );console.log('o2-----:');console.log( o2 );o1.printInfo();o2.printInfo();

執行結果:

可見:o1,o2在調用繼承自原型的方法時,如果自身有了對應的屬性定義,則調研的就是對象自身屬性,不會上溯至原型對象

如想切換作用域至原型對象,可以利用方法的call方式來實現:

o1.printInfo.call(Object.getPrototypeOf(o1)); o2.printInfo.call(Object.getPrototypeOf(o2));

結果:

?

?

?-------------------------補充---------------------------------------------------------------------------------------------------

?

上面的情況下,當對象沒有定義與原型重合的屬性時,調用原型方法,會是什么情況?代碼如下:

function ancestor(){this.name ='default';this.age = 18;}ancestor.prototype = {printInfo:function(){console.log( this.name + "," + this.age );}};function parent(){}parent.prototype = new ancestor();var o1 = new parent();o1.printInfo();

運行結果:

可見,此時最終函數執行的作用域是其原型對象,其實這就是“作用域鏈”的概念:當對象的方法用到某屬性時,會按照對象→原型parent1→原型parent2的鏈式方式,不斷向上追溯查找該屬性,直至找到或者為undefined.

?

轉載于:https://www.cnblogs.com/surfer/p/9681514.html

總結

以上是生活随笔為你收集整理的当对象与原型有相同的属性,调用时的上下文指向问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。