gpt4 book ai didi

javascript - 为什么使用原型(prototype)而不是方法

转载 作者:行者123 更新时间:2023-12-01 02:30:02 25 4
gpt4 key购买 nike

我正在看tutorial about functions 。还有一个例子

function Car(){
this.running = false
}
Car.prototype.start = function(){
this.running = true
}
Car.prototype.stop = function(){
this.running = false
}

var c = new Car()
c.running // false
c.start // true
c.running // true

但是还有另一种方法可以做同样的事情

function Car(){
this.running = false;
this.start = function(){
this.running = true
}
this.stop = function(){
this.running = false
}
}

var c = new Car()
c.running // false
c.start // true
c.running // true

问题:

  1. 与方法相比,使用原型(prototype)有哪些优缺点?
  2. 我们什么时候应该避免/使用原型(prototype)?
  3. 我们什么时候应该避免/使用方法?

最佳答案

理想情况下,每当您想要在类型的多个实例之间共享属性时,您都可以使用原型(prototype)。在你的第一个例子中

function Car() {
this.running = false
}
Car.prototype.start = function() {
this.running = true
}
Car.prototype.stop = function() {
this.running = false
}

var c = new Car()
var d = new Car()
var e = new Car()
console.log(c.__proto__ === d.__proto__) //true
c.running // false
c.start // true
c.running // true

这里的原型(prototype)对象对于 c、d 和 e 来说将保持相同,因此,您可以节省运行时内存消耗,因为您可以为这三个对象重用相同的函数,但上下文不同。

在第二个示例中

function Car(){
this.running = false;
this.start = function(){
this.running = true
}
this.stop = function(){
this.running = false
}
}

var c = new Car() // check comparing c.__proto__ === d.__proto__
var d = new Car()
var e = new Car()
c.running // false
c.start // true
c.running //

这里c,d,e将有自己的函数副本,消耗更多内存!理想情况下,在设计此类对象时应该考虑可重用性。原型(prototype)方式似乎比方法方式更好、性能更好。

关于javascript - 为什么使用原型(prototype)而不是方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48370807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com