Javascript 面向对象(三)接口代码_js面向对象

程序中的接口:规定好有几个方法,方法名是什么。(因程序中要完成任务,都是通过函数或者说方法去实现的。)

javascript中的接口:把实例出来的某"类型对象"、和实例出来的"接口对象",进行一个比较,符合规则,就可以说:这个对象实现了规定的接口;

(接口类:通过这个类,来实例出不同的接口。即不同的接口实例,也就是不同的方法个数和方法名称)
(进行比较:其实质就是判断子类型实例出来的对象,是否有接口对象中所保存的方法名,还有个数。)
小实例:
  电话类,下面可以有“坐机”,“手机”,"平板电脑电话"等等这些子类。而这些子类,都有一个共同的任务、功能或者说是目的---[拔通电话]
  为了实现这个功能,不同的子类,可以有不同的内部实现方法,让这个电话能够拔通。但现在为用户考虑的话,必需做出一个规定:
  不管你是什么子类型,你实例出来的对象,即有电话功能的对象,要实现[拔通电话],必须有二个方法,
  即:1.按出电话号码(数字键)2.按拔号键;
下面是固定的设计模式:

复制代码 代码如下:

var Interface = function(name,methods){
if(arguments.length != 2){
throw new Error("Interface constructor called with" + arguments.length + "arguments, but expected exactly 2.");
}
this.name = name;
this.methods = [];
for(var i = 0,len = methods.length; i <len; i++){
if(typeof methods[i] !== 'string'){
throw new Error("接口方法的名称必须是一个字符串");
}
this.methods.push(methods[i]);
}
};
//Static class Method
Interface.ensureImplements = function(myobject1,Iobject1){
if(arguments.length!=2){
throw new Error("方法 Interface.ensureImplemnents 指定了" + arguments.length+ "个参数,但是期望的是2个 .");
}
for(var i=1,len = arguments.length; i<len; i++){
var _interface = arguments[i];
//接口对象,要通过接口类实例出来
if(_interface.constructor !== Interface){
throw new Error("接口,不是通过Interface类,实例出来的");
}
//把接口对象里面的方法名取出来,结合到本例中的手机对象,来验证,该手机对象是否有这两个方法,且方法名是不是一样;
for(var j=0, methodsLen = _interface.methods.length; j<methodsLen;j++ ){
var method = _interface.methods[j];
if(!myobject1[method]||typeof myobject1[method] !== 'function'){
throw new Error("通过验证函数:Interface.ensureImplements: "+myobject1.name+"对象的方法"+ method + " 找不到或者不是一个Function");
}
}
}
};

下面是例子

复制代码 代码如下:

//通过接口类,实例出一个"拔通电话"的接口;现在这个接口对象testInterface,规定了二个方法,且方法名字是"callfun"和"callnum"
var testInterface = new Interface("call",["callfun","callnum"]);
//移动电话类,的构造函数;
var mobilepone = function(call){
this.name = call;
}
//移动电话类的公有方法
mobilepone.prototype = {
"constructor":mobilepone,
//必须和前面接口对象规定的方法名一样;
"callfun" : function(){
document.write("按键");
},
//必须和前面接口对象规定的方法名一样
"callnum" : function(){
document.write("拔号");
}
}
//通过移动电话类,实例一个三星的手机对象
var anycall = new mobilepone("anycall");
//检测这个个三星的手机对象,是否实现了[拔通电话]这个接口;即把三星手机对象和接口对象做为参数传入验证函数,进行比较
Interface.ensureImplements(anycall,testInterface);
anycall.callnum();

时间: 2024-10-09 21:26:25

Javascript 面向对象(三)接口代码_js面向对象的相关文章

面向对象的编程思想在javascript中的运用上部_js面向对象

其实,面向对象的思想是独立于编程语言的,例如在C#中,在一个静态类的静态方法中,按照过程式开发调用一系列静态函数,我们很难说这是面向对象的编程,相反,象jquery和extjs这样优秀的javascript库,却处处体现着面向对象的设计思想.本文不打算探讨javascript是否能够算做面向对象的编程语言,这个问题是重视中国式考试的人应该关注的,我这里只是简单的说明如何在javascript中使用面向对象的编程思想. 面向对象首先要有对象.在javascript中创建一个对象非常简单: 复制代码

js对象的构造和继承实现代码_js面向对象

复制代码 代码如下: <script> //定义js的user对象 function User(name,age){ this.name=name, this.age=age, this.getName=function(){ return this.name; }, this.getAge=function(){ return this.age; } } //实例化一个对象 var use=new User("aa",21); alert(use.name); alert

实现JavaScript中继承的三种方式_js面向对象

一.原型链继承 在原型链继承方面,JavaScript与java.c#等语言类似,仅允许单父类继承.prototype继承的基本方式如下: 复制代码 代码如下: function Parent(){} function Child(){} Child.prototype = new Parent(); 通过对象Child的prototype属性指向父对象Parent的实例,使Child对象实例能通过原型链访问到父对象构造所定义的属性.方法等. 构造通过原型链链接了父级对象,是否就意味着完成了对象

改变javascript函数内部this指针指向的三种方法_js面向对象

在查了大量的资料后,我总结了下面的三条规则,这三条规则,已经可以解决目前我所遇到的所有问题.规则0:函数本身是一个特殊类型,大多数时候,可以认为是一个变量. 复制代码 代码如下: function a() { alert(this); } 或者 var a = function() { alert(this); } 都可以认为是创建了一个变量,这个变量的值就是一个函数. 规则1:如果一个函数,是某个对象的key 值,那么,this就指向这个对象. 这个规则很好理解: 复制代码 代码如下: var

javascript面向对象的方式实现的弹出层效果代码_js面向对象

说到js的面向对象,就不得不提到prototype这个js内置属性了(注意:这里的prototype可不是prototype.js),它的作用就是可以动态的向一个对象(object)添加某种属性.我现在要做的就是尽可能的让代码达到公用,像继承啦之类的.好了,这些就不多说了,对prototype不了解的可以搜索下相关内容. 今天要做的是点击一个html元素让其弹出一个友好的对话框来,首先要明确两点,一点是我可能会大量的用到这种方式,甚至不希望出现系统的alert或confirm,第二点就是弹出的内

JavaScript 创建对象和构造类实现代码_js面向对象

创建一个对象 Java代码 复制代码 代码如下: <script type="text/javaScript"> var newObject=new Object(); //创建一个对象 newObject.firstName="frank"; //增加一个firstName属性 newObject.sayName=function(){ alert(this.firstName); } //添加一个sayName方法 //调用sayName方法 //

Javascript 面向对象(二)封装代码_js面向对象

写个小例子: 第一步:做一个"手机的类" 复制代码 代码如下: var MobilePhone = (function(){ ---- })() 第二步:考虑这个类,里需要那些类的私有属性,这里我想定义的是实例出来手机的数量 复制代码 代码如下: var MobilePhone = (function(){ //私有属性 var count = 0; //代表手机的数量 })() 第三步:创建一个构造函数,即实例时候,对产生的新象的一个初始化,例如属性,方法的初始化;在这个例子中,每一

javascript面向对象编程(一) 实例代码_js面向对象

复制代码 代码如下: <script type="text/javascript"> var test = { numA: 10, objB: {}, arrC: [], init: function(){ alert(this.numA); }, sayHi: function(name){ alert("hello " + name); }, sayHelloWorld: function(){ this.sayHi("world"

javascript面向对象编程代码_js面向对象

复制代码 代码如下: var orchard = function (){ //基类型构造函数代理 静态方法都在代理函数上 this.constructor && this.constructor.apply(this,arguments); }; orchard.extend = function() { var parentObj = this; var parameters = parentObj.parameters ? parentObj.parameters.concat(_.