2.1 The Object Model -- Classes and Instances(类和实例)

一、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");

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

转载于:https://www.cnblogs.com/sunshineground/p/5145730.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化并行计算等改进策略。; 适合人群:具备一定Python编程基础优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值