脚本原型链接更改目标

我是一名学习编程的学生。


我有一个问题。


    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;

我认为创建和使用新对象一定有理由。但我不知道。请教我。谢谢。


慕少森
浏览 83回答 1
1回答

三国纷争

至少有一个很好的理由:该功能已被弃用,因此您不应将其用于将来的兼容性。__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();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript