老师,,在寄生式继承里,直接给原型定义方法不就可以让实例去调用吗?

老师,,在寄生式继承里,直接给原型定义方法不就可以让实例去调用吗?

老师,在寄生式继承里,直接写在原型上,比如这样。为什么要在函数里写??

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<body>

    <script>


        var o1={

            a:3,

            b:5,

            sayHello:function(){

                console.log("你好")

            }

        }

        function f(o){

            var p =Object.create(o);

            return p;

        }

        var p1=f(o1);

        p1.sayHello();

        </script>

</body>

</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小李 2022-11-25 09:50:02

同学你好,这节课中的知识点如下:

https://img1.sycdn.imooc.com//climg/63801de109054f6830791067.jpg

另外一点,如果写在原型上后期要去扩展会很麻烦,如增加了个什么方法都要全更改原型,这样效率与质量都是问题。

比如每次的实例化是否都需要某个方法?诸如此类的问题就会有了,因为原型上的方法很多会使得原型变得很臃肿,不好维护等的问题就会出现了。

祝学习愉快!

  • 写在原型上可以这样写吗

    function f(o) {
       var p = Object.create(o);
       p.sayhello = function () {
          console.log(this.name + " say hello");
       };
       p.sleep = function () {
          console.log(this.name + " 正在睡觉");
       };
        //方法写在原型上
       o.test = function () {
          console.log("test");
       };
       //返回以o为原型,且拥有sayhello和sleep方法的对象
       return p;
    }


    2022-12-11 16:57:39
  • 同学你好,首先一点,可以写因为确实可以答道需求。但一般来说不建议写在原型上,如上述回答中是不建议的。比如说我们今后的工作中有多人合作,那么这个时候会有一个基础的对象,这个对象是不能进行更改的或者说随意更改的。如果说这时候我们在原型上进行添加,那么在复用这个对象的时候会给其他同事带来不必要的麻烦如沟通成本或者其他问题,或者项目已经是优化好的了,这时候我们这么干会引起不必要的麻烦的。所以寄生式继承它本身的目的也是如此。

    https://img1.sycdn.imooc.com//climg/63959fd8098c4ca232581068.jpg

    祝学习愉快!

    2022-12-11 17:16:11
  • 可以的,但是一般不推荐这么做,具体的参考小李老师的解释,祝学习愉快~

    2022-12-11 17:18:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师