chrome prototype __proto__使用問題

发布于 2022-09-02 15:54:24 字数 475 浏览 8 评论 0

请问以下代码中__proto__的使用是如何用意?

function ContextMenuHandler() {
    this.showingEvents_ = new EventTracker();
  }

  ContextMenuHandler.prototype = {
    __proto__: EventTarget.prototype,

    /**
     * The menu that we are currently showing.
     * @type {cr.ui.Menu}
     */
    menu_: null,
    get menu() {
      return this.menu_;
    }
}    

如果修改成以下有什么区别呢?

ContextMenuHandler.prototype = EventTarget.prototype;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

星軌x 2022-09-09 15:54:24

__proto__为一个对象实例具有的属性,指向一个原型对象
prototype为一个构造函数对象具有的属性,对象实例不具有这个属性,指向一个原型对象
当使用new操作符调用一个构造函数时,__proto__属性就被绑定到生成的实例对象上,指向这个构造函数的prototype属性指向的原型对象上。
函数也是对象

function EventTarget(){
}
EventTarget.prototype.getName=function(){
    console.log("EventTarget.getName");
}
function ContextMenuHandler() {
   this.showingEvents_=null;
}
ContextMenuHandler.prototype = { 
    __proto__: EventTarget.prototype,
    menu_: null,
    get menu() {
      return this.menu_;
    }
}
console.log(ContextMenuHandler.__proto__);//[native code]
console.log(typeof ContextMenuHandler.__proto__);//function 函数对象的原型是一个函数对象
console.log(ContextMenuHandler.prototype.__proto__===EventTarget.prototype);//true,原型对象的原型重新指向EventTarget.prototype指向的对象
var newContextMenuHandler=new ContextMenuHandler();
console.log(newContextMenuHandler.__proto__=== EventTarget.prototype);//false
console.log(newContextMenuHandler.__proto__=== ContextMenuHandler.prototype);//true

ContextMenuHandler.prototype = EventTarget.prototype;
var newContextMenuHandler2=new ContextMenuHandler();
console.log(newContextMenuHandler2.__proto__===EventTarget.prototype);//true
console.log(newContextMenuHandler2.__proto__=== ContextMenuHandler.prototype);//true

console.log(typeof ContextMenuHandler.__proto__);//function 函数对象的原型是一个函数对象
console.log(ContextMenuHandler.prototype.__proto__===EventTarget.prototype);//false,原型对象的原型默认指向一个object对象
console.log(typeof ContextMenuHandler.prototype.__proto__);//object
半窗疏影 2022-09-09 15:54:24

prototype属性一般用在构造函数上,构造函数创建的对象的__proto__即为构造函数的prototype

var F = function(){}
F.prototype = {a:12}
var f = new F()
console.log(f.__proto__ === F.prototype)//true

设置如果改成下面那种代码,就不好给ContextMenuHandler.prototype添加方法了,因为这样还会修改EventTarget.prototype。其实也可以ContextMenuHandler.prototype = new EventTarget(),但这样可能会继承不必要的属性。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文