extends Object with Observable和extends Observable有什么区别

时间:2013-11-04 09:32:46

标签: dart

使用Observable扩展Object有什么区别,并将Observable扩展为应用于下面的类。

运行应用程序时结果相同。

library models;

import 'package:polymer/polymer.dart';

class Person extends Object with Observable {
  @observable String name;
  @observable bool signedAgreement = false;

  Person();

  Person.from(Person other) {
    name = other.name;
    signedAgreement = other.signedAgreement;
  }

  blank() {
    name = '';
    signedAgreement = false;
  }
}


library models;

import 'package:polymer/polymer.dart';

class Person extends Observable {
  @observable String name;
  @observable bool signedAgreement = false;

  Person();

  Person.from(Person other) {
    name = other.name;
    signedAgreement = other.signedAgreement;
  }

  blank() {
    name = '';
    signedAgreement = false;
  }
}

1 个答案:

答案 0 :(得分:7)

这两个声明之间的行为没有区别。

这是a quote from Florian Loitsch

  

使用mixin扩展“Object”时,第一个mixin总是取代“Object”。

唯一的不同之处在于类层次结构(superclass不一样):

import 'dart:mirrors';

abstract class Mixin {}
class A extends Mixin {}
class B extends Object with Mixin {}

main() {
  print(reflectClass(A).superclass); 
  // => ClassMirror on 'Mixin'

  print(reflectClass(A).superclass.superclass);
  // => ClassMirror on 'Object'

  print(reflectClass(B).superclass); 
  // => ClassMirror on 'dart.core.Object with .Mixin'

  print(reflectClass(B).superclass.superclass); 
  // => ClassMirror on 'Object'
}