一、Defining Classes(定义类)

1. 定义一个新的Ember类,调用Ember.Object上的extend()方法:

example:定义了一个含有say()方法的新的Person类。

Person = Ember.Object.extend({
say(thing) {
alert(thing);
}
});

2. 你也可以通过调用任何存在的class的extend()方法创建一个subclass。

example:你想创建一个Ember的内置Ember.Component类的子类

app/views/person.js

PersonView = Ember.Component.extend({
tagName: 'li',
classNameBindings: ['isAdministrator']
});

3. 当你定义一个子类时,你可以重写父类的方法,但是你仍然可以通过调用_super()方法获取父类的实现。

Person = Ember.Object.extend({
say(thing) {
var name = this.get('name');
alert(name + " says: " + thing);
}
}); Soldier = Person.extend({
say(thing) {
this._super(thing + ", sir!");
}
}); var yehuda = Soldier.create({
name: "Yehuada Katz"
}); yehuda.say("Yes"); //alerts "Yehuada Katz says: Yes, sir!"

二、Creating Instances(创建实例)

1. 一旦你定义了一个类,你可以通过调用它的create()方法来创建新实例。对这个实例来说,任何你定义的在该类上的方法,属性和可计算的属性都是可用的。

var person = Person.create();
person.say("Hello");//alerts " says: Hello"

2. 当你创建一个实例,你可以通过给create()方法传递一个可选的hash初始化它的属性的值。

Person = Ember.Object.extend({
helloWorld() {
alert("Hi, my name is " + this.get('name'));
}
}); var tom = Person.create({
name: "Tom Dale"
}); tom.helloWorld();//alerts "Hi, my name is Tom Dale"

3. 处于性能原因,注意当调用create()时不能重新定义一个实例的计算属性和方法,或者定义一个新的。应该只设置简单属性时调用create()。如果你需要定义或者重定义方法或者计算属性,创建一个新的subclass并实现它。

4. 按照惯例,保存类的属性或者变量名是Pascal命名法,但是类的实例不是这样。例如,变量Person会指向一个类,然而person会指向一个实例(通常是Person类)。在你的Ember应用程序中,你应该坚持这些命名规则。

三、Initializing Instances(初始化实例)

1. 当一个新的实例被创建,它的init方法被自动调用。这是理想的地方来设置所需的新实例:

Person = Ember.Object.extend({
init() {
var name = this.get('name');
alert(name + ", reporting for duty!");
}
}); Person.create({
name: "Stefan Penner"
});
//alerts "Stefan Penner, reporting for duty!"

2. 如果你是子类化一个框架内部的类,例如Ember.Component,你重写init方法,确保你调用this._super()!如果你没有这样做,系统可能没有机会去做重要的设置工作,在你的应用程序中你将会看到奇怪的行为。

四、Accessing Object Properties(访问对象属性)

当你访问一个对象的属性时,使用getset访问器方法:

var person = Person.create();

var name = person.get('name');
person.set('name', "Tobias Funke");

请确保使用这些访问器方法,否则,计算属性不会重新计算,观察者不会触发,模板不会更新。

2.1 The Object Model -- Classes and Instances(类和实例)的更多相关文章

  1. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)

            研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...

  2. python's object model

    [python's object model] 1.object.__init__(self[, ...])        如果subclass没有实现__init__,那么python类在实例化的时 ...

  3. Page Object Model (Selenium, Python)

    时间 2015-06-15 00:11:56  Qxf2 blog 原文  http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...

  4. selenium page object model

    Page Object Model (POM) & Page Factory in Selenium: Ultimate Guide 来源:http://www.guru99.com/page ...

  5. POM(project Object Model) Maven包管理依赖 pom.xml文件

    什么是POM POM全称为“Project Object Model”,意思是工程对象模型.Maven工程使用pom.xml来指定工程配置信息,和其他文本信息.该配置文件以xml为格式,使用xml语法 ...

  6. [转]The Regular Expression Object Model

    本文转自:https://docs.microsoft.com/en-us/dotnet/standard/base-types/the-regular-expression-object-model ...

  7. Component Object Model (COM) 是什么?

    本文主要介绍 COM 的基础知识,倾向于理论性的理解,面向初学者,浅尝辄止. 1. COM 是什么: COM 的英文全称是,Component Object Model,中文译为,组件对象模型.它官方 ...

  8. Selenium的PO模式(Page Object Model)[python版]

     Page Object Model 简称POM  普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...

  9. 在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况

    自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化:自从SharePoint 2010开始有了Client Side Object Model ...

随机推荐

  1. 关于截取字符串substr和substring两者的区别

    https://blog.csdn.net/adley_function/article/details/52130762 substr和substring两个都是截取字符串的. 两者有相同点,如果只 ...

  2. Trie树(字典树)(1)

    Trie树.又称字典树,单词查找树或者前缀树,是一种用于高速检索的多叉树结构. Trie树与二叉搜索树不同,键不是直接保存在节点中,而是由节点在树中的位置决定. 一个节点的全部子孙都有同样的前缀(pr ...

  3. PHP-006

    Q:应用程序执行时的路径 "D:\*******\protected\runtime" 是无效的. 请确定它是一个可被 Web server process 写入资料的目录. A: ...

  4. Python 对目录做遍历

    os.walk() 用于遍历目录里的文件,或者说迭代目录里的文件 ??? 什么意思?比如 Linux 中 find /data -type f 表示找出 /data 目录下的所有文件,它会先找出 /d ...

  5. 使用 XPath

    XPath 简介: (1) 前面我们爬取一个网页,都是使用正则表达式来提取想要的信息,但是这种方式比较复杂,一旦有一个地方写错,就匹配不出来了,因此我们可以使用 XPath 来进行提取(2) XPat ...

  6. Sass-学习笔记【基础篇】

    最下边附结构图 在线编辑器网址如下:http://sassmeister.com/  注意编写的时候,符号千万别用了中文的:.:.....之类的,会报错,Sass也转换不成css. less和sass ...

  7. JS-鼠标彩色拖尾小效果

    实现步骤解析: * 这原本就是一个鼠标后面跟随一串小方块的效果,     * 后来我就想,运用之前学的随机数的案例把小方块的颜色做成彩色的,     * 并且每一个小方块的色彩是随机分配而不是我自己手 ...

  8. sencha touch 入门系列 (九)sencha touch 视图组件简介

    对于一个普通用户来说,你的项目就是一组简单的视图集合,用户直接通过跟视图进行交互来操作你的应用,对于一个开发人员来说,视图是一个项目的入口,虽然大部分时候最有价值的部分是在model层和control ...

  9. [python] python单元测试经验总结

    python写单元大多数都会用到unittest和mock,测试代码覆盖率都会用到coverage,最后再用nose把所有的东西都串起来,这样每次出版本,都能把整个项目的单元测试都运行一遍. Unit ...

  10. 【巷子】---vue项目打包---基本使用---【vue】

    一.基本设置 二.打包 npm run build 三.github创建一个仓库 1.将文件上传至仓库 2.点击仓库设置 3.选择代码上传到master 4.点击地址即可预览 5.常用技巧 a.如果在 ...