关于javascript设计模式里构造器模式的问题

看到这里一篇文章《JavaScript设计模式一:工厂模式和构造器模式》

https://segmentfault.com/a/11...
关于这篇文章里的构造器模式。
最后有一段:

带原型的Constructor(构造器)

    <script type="text/javascript">

            function Car(model,year,miles) {

                this.model = model;

                this.year = year;

                this.miles = miles;

            }

            /** 关于下面这段代码 **/

            Car.prototype.run = function () {

                return this.model + " has done " + this.miles + " miles ";

            };

            /** 关于上面这段代码 **/

            var Benz = new Car('S350',2010,20000);

            var Ford = new Car('Ford',2012,12000);

    

            console.log(Benz.run());//"S350 has done 20000 miles "

            console.log(Ford.run());

   </script>

   


   不用prototyp,把this.run = function(){...}当成方法写在构造函数里也可以正常运行,两者有什么不一样?

   和单例模式有关吗?还是可以避免重复调用的资源浪费?


qq_花开花谢_0
浏览 1590回答 2
2回答

慕斯王

如果你只有&nbsp;Car&nbsp;这一个类用到&nbsp;run&nbsp;方法,那么两种写法在性能上是没有区别的。但是如果你有&nbsp;Car1&nbsp;到&nbsp;Car10&nbsp;十个类:如果你写在类内部,那么你的内存里将有10个&nbsp;run&nbsp;方法。如果你使用prototyp,那么你的内存里将有1个&nbsp;run&nbsp;方法。这么说你理解了吗?

杨魅力

楼上说的不正确,写到原型上避免的不是类之间的浪费,是不同对象之间的浪费,你如果写在构造函数中,没次调用new获取一个对象,都会生成一个函数体完全一样的函数,而使用prototype委托,则所有的实例的run方法都委托到了prototype对象上,多少个对象都只有一个函数,楼上说的类是错的。原型就是构造函数和对象实例的链接,与不同的类没有关系。他说的十个类,除非你每次生成一个类都自己重新写一遍run函数,否则不会造成他说的那个结果。
打开App,查看更多内容
随时随地看视频慕课网APP