gpt4 book ai didi

javascript - Coffeescript 中的类和继承

转载 作者:行者123 更新时间:2023-11-29 20:04:12 26 4
gpt4 key购买 nike

这到底是怎么回事?
Daughter 类如何包含在 Brother 中设置的数据,我应该如何确保兄弟类中的数据集不会相互干扰?

class Parent 
data: {}

class Child extends Parent
age: 10

Son = new Child
Son.data.name = "John Doe"

Daughter = new Child
console.log Daughter.data # => { name: 'John Doe' }

最佳答案

问题似乎是,您没有使用构造函数为每个实例初始化 data。相反,您给它一个初始值,该初始值恰好位于可变的 Animal 上。每当您分配给 instance.data.attribute 时,您实际上是在修改该共享对象。如果您使用 data: 1 代替,您将不会看到这种共享行为。

这解决了你的问题:

class Parent 
constructor: () ->
@data = {}

免责声明:我不太了解 JavaScript 的原型(prototype)继承,所以我提供的技术细节可能不正确,但对现象的描述似乎是准确的。

编译时的区别

class Parent 
staticD: {}
constructor: ->
@data = {}

编译为:

Parent = (function() {

Parent.prototype.staticD = {};

function Parent() {
this.data = {};
}

return Parent;

})();

如您所见,staticD 仅在创建“类”时初始化一次,另一方面,data 在构造函数中初始化并分配一个新的,每次创建实例时都是空对象。

关于javascript - Coffeescript 中的类和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12896004/

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