美文网首页
行为委托

行为委托

作者: yanghanbin_it | 来源:发表于2017-06-09 10:23 被阅读0次

这个场景中我们将讲解两个控制器对象,一个用来处理网页的登录form(表单),另一个实际处理服务器的认证(通信)

根据典型的类的设计模式,我们在一个叫做Controller的类中将任务分解为基本功能,之后我们会衍生出两个子类,LoginController和AuthController,它们都继承自Controller而且特化某些基本行为。

// 父类
function Controller() {
this.errors = [];
}
Controller.prototype.showDialog = function(title,msg) {
// 在对话框中给用户显示标题和消息
};
Controller.prototype.success = function(msg) {
this.showDialog( "Success", msg );
};
Controller.prototype.failure = function(err) {
this.errors.push( err );
this.showDialog( "Error", err );
};
// 子类
function LoginController() {
Controller.call( this );
}
// 将子类链接到父类
LoginController.prototype = Object.create( Controller.prototype );
LoginController.prototype.getUser = function() {
return document.getElementById( "login_username" ).value;
};
LoginController.prototype.getPassword = function() {
return document.getElementById( "login_password" ).value;
};
LoginController.prototype.validateEntry = function(user,pw) {
user = user || this.getUser();
pw = pw || this.getPassword();

if (!(user && pw)) {
    return this.failure( "Please enter a username & password!" );
}
else if (pw.length < 5) {
    return this.failure( "Password must be 5+ characters!" );
}

// 到这里了?输入合法!
return true;

};
// 覆盖来扩展基本的failure()
LoginController.prototype.failure = function(err) {
// "super"调用
Controller.prototype.failure.call( this, "Login invalid: " + err );
};
// 子类
function AuthController(login) {
Controller.call( this );
// 除了继承外,我们还需要合成
this.login = login;
}
// 将子类链接到父类
AuthController.prototype = Object.create( Controller.prototype );
AuthController.prototype.server = function(url,data) {
return $.ajax( {
url: url,
data: data
} );
};
AuthController.prototype.checkAuth = function() {
var user = this.login.getUser();
var pw = this.login.getPassword();

if (this.login.validateEntry( user, pw )) {
    this.server( "/check-auth",{
        user: user,
        pw: pw
    } )
    .then( this.success.bind( this ) )
    .fail( this.failure.bind( this ) );
}

};
// 覆盖以扩展基本的success()
AuthController.prototype.success = function() {
// "super"调用
Controller.prototype.success.call( this, "Authenticated!" );
};
// 覆盖以扩展基本的failure()
AuthController.prototype.failure = function(err) {
// "super"调用
Controller.prototype.failure.call( this, "Auth Failed: " + err );
};

相关文章

  • 行为委托

    1、面向委托的设计思考下列代码: 首先定义一个名为Task的对象,它包含所有任务都可以使用的具体行为。接着对于每个...

  • 行为委托

    这个场景中我们将讲解两个控制器对象,一个用来处理网页的登录form(表单),另一个实际处理服务器的认证(通信) 根...

  • 行为委托

    看起来,React组件中的prop很像是HTML元素的属性,不过HTML组件属性的值都死字符串类型 ,即使是内嵌J...

  • 6 行为委托

    JS中的原型链机制的本质就是对象之间的关联关系。 面向委托的设计 我们需要把思路从类和继承的设计模式转换到委托行为...

  • 行为委托理论

    为了更好地学习如何更直观地使用 [[Prototype]] ,我们必须认识到它代表的是一种不同于类的设计模式。 1...

  • 未成年人能否办理购房委托公证?

    问题:甲(15岁)申请办理购房委托公证,根据相关法律规定,无民事行为能力人不能办理委托,限制民事行为能力人办理委托...

  • 设计模式-策略模式

    抽取对象行为成算法簇 对象行为委托给算法接口执行

  • 聊聊对象行为委托

    昨天我们聊到了对象的原型,知道了有 new 和 Object.create() 两种操作原型的方式。今天我们来对比...

  • 2017.11.1

    委托是一种引用方法的类型。 一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用事件可以像其他任...

  • Kotlin零基础学习 委托和代理

    一.委托代理概念 委托:把事情委托给别人办理。代理:以他人名义,在授权范围内进行对被代理人直接发生的行为。 有点弄...

网友评论

      本文标题:行为委托

      本文链接:https://www.haomeiwen.com/subject/fpctqxtx.html