为了账号安全,请及时绑定邮箱和手机立即绑定

脚本原型链接更改目标

脚本原型链接更改目标

慕少森 2022-09-11 20:27:41
我是一名学习编程的学生。我有一个问题。    function a () {    }    a.prototype.prtSomething = function(arg) { console.log(arg); }    function b () {    }    var myObj = new b();如果我想在 myObj 中使用 a 的方法,我们使用此代码。b.prototype = Object.create(a.prototype);b.prototype.constructor = b;这意味着更改范围链接的目标。但是我们为什么不使用这段代码呢?b.prototype.__proto__ = a.prototype;我认为创建和使用新对象一定有理由。但我不知道。请教我。谢谢。
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

至少有一个很好的理由:该功能已被弃用,因此您不应将其用于将来的兼容性。__proto__

我建议阅读有关该主题的MDN页面,如果您正在学习,还可以阅读有关继承的链接页面。

有用的附加说明:使用是一种以原型方式模拟类继承的方法(b从a继承),而无需调用“父”(a)构造函数。如果您希望使用调用的“父”构造函数模拟继承,则可以使用b.prototype = Object.create(a.prototype);b.prototype = new a();

当然,它是对类行为的模拟,它在细节上有所不同,因为原型不是类,例如,您可以在创建实例将函数动态添加到 的原型中,并且新函数将可用于该实例,因为它通过引用工作。以类似的方式,第二个示例不会为每个后续实例执行 的构造函数,而是在将其分配给 的原型时只执行一次。abab

实际上,当你了解原型时,我发现它们真的很强大,允许许多组合。

function a () {

    console.log('a constructor');

}


a.prototype.prtSomething = function(arg) { console.log(arg); }


function b () {

    console.log('b constructor');

}


b.prototype = Object.create(a.prototype);

b.prototype.constructor = b;


var myObj = new b();

展开代码段

function a () {

    console.log('a constructor');

}


a.prototype.prtSomething = function(arg) { console.log(arg); }


function b () {

    console.log('b constructor');

}


b.prototype = new a();

b.prototype.constructor = b;


var myObj = new b();


查看完整回答
反对 回复 2022-09-11
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信