Home  >  Article  >  Web Front-end  >  Javascript object-oriented-interface

Javascript object-oriented-interface

高洛峰
高洛峰Original
2017-01-04 09:02:59941browse

Interface: Some principles stipulated for realizing a certain task, function, purpose, etc.

Interface in the program: Specify how many methods there are and what are the method names. (Because the tasks to be completed in the program are all implemented through functions or methods.)

Interface in javascript: combine a certain "type object" that comes out of the instance, and the "interface object" that comes out of the instance, After making a comparison and complying with the rules, it can be said that: this object implements the specified interface;

(Interface class: through this class, different interfaces are instantiated. That is, different interface instances, that is, different Number of methods and method names)

(Comparison: the essence is to determine whether the object from the subtype instance has the method name saved in the interface object, and the number.)

Small Example:

Telephone category, under which there can be subcategories such as "phone", "mobile phone", "tablet phone", etc. And these subclasses all have a common task, function or purpose---[Dial the phone]

In order to realize this function, different subclasses can have different internal implementation methods, so that This phone can be connected. But now for the sake of users, a stipulation must be made:

No matter what subtype you are, the object you instantiate, that is, the object with the phone function, must have two things to implement [dialing the phone] A method,

That is: 1. Press the phone number (numeric key) 2. Press the dial key;

The following is the fixed design pattern:

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] !== &#39;string&#39;){ 
   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] !== &#39;function&#39;){ 
    throw new Error("通过验证函数:Interface.ensureImplements: "+myobject1.name+"对象的方法"+ method + " 找不到或者不是一个Function"); 
   } 
  } 
 } 
};

The following is Example

//通过接口类,实例出一个"拔通电话"的接口;现在这个接口对象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();


For more Javascript object-oriented interface-related articles, please pay attention to the PHP Chinese website!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn