code: function () {
                  var self = this, cs = [], i, c = self.constructor, attrs = self.getAttrs();
                  while (c) {
                      cs.push(c);
                      c = c.superclass && c.superclass.constructor;
                  }
                  cs.reverse();    // from super class to sub class
                  // from super class to sub class
                  for (i = 0; i < cs.length; i++) {
                      var ATTRS = cs[i].ATTRS || {};
                      for (var attributeName in ATTRS) {
                          if (attributeName in attrs) {
                              var attributeValue, onSetMethod;
                              var onSetMethodName = ON_SET + ucfirst(attributeName);    // 存在方法，并且用户设置了初始值或者存在默认值，就同步状态
                              // 存在方法，并且用户设置了初始值或者存在默认值，就同步状态
                              if ((onSetMethod = self[onSetMethodName]) && // 用户如果设置了显式不同步，就不同步，
                                  // 比如一些值从 html 中读取，不需要同步再次设置
                                  attrs[attributeName].sync !== 0 && (attributeValue = self.get(attributeName)) !== undefined) {
                                  onSetMethod.call(self, attributeValue);
                              }
                          }
                      }
                  }
              }
docs: sync attribute change event
  @protected