javascript - js模拟接口问题求助
PHP中文网
PHP中文网 2017-04-11 11:34:42
[JavaScript讨论组]
/**
     * 创建接口对象
     * @param name 接口名 
     * @param methods 接口方法
     */
    var Interface = function(name,methods){
        if(arguments.length != 2){
            throw new Error('必须输入两个参数,当前个数'+arguments.length);
        }

        this.name=name;
        this.methods=[];
        for(var i=0, len=methods.length; i



这句 Interface.ensureImplements 中interface是哪里的啊? 为什么不把这个写在上面那个interface里 Interface.ensureImplements = function(object) 这里的参数是object是什么意思啊 这个特别不能理解 求指点
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
PHP中文网

interface 是從 arguments 中取得的,而 arguments 則是 javascript 內建一特殊屬性,可以取得當前函數接受到的參數,形式類似於數組。

那從上面代碼來講:

Interface.ensureImplements = function(object){
    if(arguments.length < 2){
        throw new Error('必须输入两个参数,当前个数' + arguments.length);
    }
    // 取得當前參數
    // 注意,這邊 i 從 1 開始,所以會跳過 object 取得後面其他參數
    // 參數是哪些?
    // Interface.ensureImplements(mapInstance,DynamicMap)
    // 這邊的 mapInstance 對應到 object,而 DynamicMap 就是 arguments[1]
    
    for(var i=1, len=arguments.length; i < len; i++){
        var interface = arguments[i];
        
        // 這邊會檢查傳進來的參數是否為 Interface 類型
        if(interface.constructor != Interface){
            throw new Error("请实现接口");
        }
        
        // 這邊會檢查其中的 methods 中的每個值是否都有在 object 中實踐
        for (var j = 0, methodsLen = interface.methods.length; j < methodsLen; j++){
            var method = interface.methods[j];
            if(!object[method] || typeof object[method] !== 'function'){
                throw new Error("接口名:"+interface.name+"方法名:"+method+"没找到");
            }
        };
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号