سؤال

أحاول معرفة كيفية عمل الميراث في Coffescript. إليك مثال مبسط على الكود الخاص بي:

class Parent

  constructor: (attrs) ->
    for own name,value of attrs
      this[name] = value

Parent.from_json_array = (json, callback) ->
  for item in JSON.parse(json)
    obj = new ChildA item  # [1]
    callback obj

class ChildA extends Parent

class ChildB extends Parent

ChildA.from_json_array("[{foo: 1}, {foo: 2}]") (obj) ->
  console.log obj.foo

ماذا أحتاج إلى وضع علامة على الخط [1] لاستخدام فئة الطفل الصحيحة هنا؟ هذا يعمل ، ولكنه يخلق فقط كائنات مع نموذج أولي من ChildA. لقد جربت شيئًا مثل:

Parent.from_json_array = (json, callback) ->
  klass = this.prototype
  for item in JSON.parse(json)
    obj = klass.constructor item  # [1]
    callback obj

... لكن هذا يترك obj كما هو غير محدد في وظيفة رد الاتصال الخاصة بي (Typeerror: لا يمكن قراءة الخاصية "foo" من غير المحددة ".

ما هو التعويذ السحري في Coffescript ليكون قادرًا على إنشاء كائن جديد لفصل ، حيث يكون الفصل متغيرًا؟

هل كانت مفيدة؟

المحلول

فما باللك ، لقد اكتشفت ذلك:

Parent.from_json_array = (json, callback) ->
  klass = this
  for item in JSON.parse(json)
    obj = new klass item
    callback obj

تبين أنه يمكنك فقط new فئة مخزنة في متغير. اعتقدت أنني جربت هذا من قبل ، لكنني كنت أحصل على خطأ في بناء الجملة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top