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

st_*_*rke 5 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*uin 8

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

以下是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'
}
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢Alexandre. (2认同)
  • 不要忘记验证答案. (2认同)