十五的学习日记20160926-你不知道的JS笔记/

十五的学习日记20160926

JavaScript

  1. 一个用于检测正负值的函数,能够用它辨别-0值.
    我以为挺好用,之后能够写到本身的工具库里.
//函数:检查传入参数是否为正数.Number=>Boolean
function isPositive(num){
    if(typeof num !="number"||!Math.isNaN(num)){return false}//类型检查!
    return 1/num===1/Math.abs(num)//若是一个数和他自己的绝对值相等那么就是正的,不然就是负的,此处负零为负,正零为正.
}
  1. 工厂模式\混合模式的原理和应用
    原理:
  • 工厂模式: 设置加工函数,按照传入参数选择类来生成实例,返回包装结果.
  • 混合模式: 相似工厂模式,但不选择类来生成实例,而是把类做为要生成对象的子类.
    ...算了,仍是不写什么原理了,看着头大,本身写代码太少,读不懂.
  1. 工厂模式用例和解释:扑克牌类的写法:
    需求分析:
    卡牌自己:2种颜色,4种花色,每种花色13阶,外加大小王.
    类方法:能够按多种规则进行排序,
    能够洗牌,抽牌,检查牌库状态(空\满)
    检查和提示重复.
    按这写法想了一夜,发现码量太大了.今晚不可能写完
(function () {
    /*
    * 基本思路:
    * 经过basicSet生成图片套牌,包含花色颜色阶位
    * 未完成
    * */

    var basicSet={//基础设置只为初始化牌面而用.
        pattern:{heart:"♥",diamond:"♦",spade:"♠",club:"♣"},
        color:{red:"red",black:"black"},

        joker:{needed:true,jokrank:14},
        rank:["A","2","3","4","5","6","7","8","9","10","J","Q","K"],
        cardBox:[],
        code_generate://生成惟一密码.无需执行,每次执行都至关于重置内部arr数组.
            function () {
                var arr=[];
                return function () {
                    for(;;){
                    var key=Math.random().toString(16).substring(2);
                    if(arr.indexOf(key)==-1){
                        break;
                        }else{
                        key=Math.random().toString(16).substring(2);
                    }
                    }
                    arr.push(key);
                    return key;
                }
            }

    };
    //一张卡的构造函数
    var SingleCard=function (face=false,color="black",pattern="♥A",rank=0,Id,owner="host",joker=null) {
        //下面这些属性除了正反面能够修改,其他在创造后都不能够修改,因此这段代码会重写成带有被写保护模式的
        if(joker){
            this.isfrontface=face?face:false;
            this.color=color?color:"black";
            this.pattern=null;
            this.rank=basicSet.joker.jokrank;
        }
        else {
            this.isfrontface=face?face:false;
            this.color=color?color:"black";
            this.pattern=pattern?pattern:"♥1";
            this.rank=rank
        }
        this.Id=Id?Id:Math.random().toString(16).substring(2);
        this.owner=owner
    };
    SingleCard.prototype.go={
        turnRound:function () {
            this.isfrontface=this.isfrontface?false:true;
        }
    };
    //一组卡的构造函数
    var cardSet=function (owner="host",cards) {
        this.owner=owner;
        this.cards=[];
        if(Object.prototype.toString.call(cards)==="[object Array]"){
            this.cards.concat(cards);
        }
    };
    cardSet.prototype.go={
      shuffle:function () {

      },
      get function(){
          
      }
    };

    //初始化卡片区
    var initCardZone =function (){

    };
    //初始化入口
    var init=function () {

    };
    //初始化使用者
    var user=function (name,direction,role="player") {
        
    };


    //模块出口
    return (function () {
        //接入口
        window.myGames={

        }
    })();

    

})();

4.new操做符的逻辑, new虽然被认为次一级,点号访问和括号调用最高级,但存在以下两种状况
new func()()转化为new (func())()
new func.func()转化为new (func.func())
见代码以下javascript

function Foo() { getName = function () { alert (1); }; return this; } 
Foo.getName = function () { alert (2);}; 
Foo.prototype.getName = function () { alert (3);};
var getName = function () { alert (4);};
function getName() { alert (5);} 
//请写出如下输出结果: 
Foo.getName(); 
getName(); 
Foo().getName(); 
getName(); 
new Foo.getName(); 
new Foo().getName(); 
new new Foo().getName();

做者: 你不知道的前端
连接:http://www.imooc.com/article/9925
来源:慕课网前端

工具&思想

  1. 今天看到群里一张emacs的截图,发现emacs没有想象中的丑陋, 而后去网上了解了emacs的一些细节,好比他的无所不能,能够写文章,能够任务管理也能够编写项目计划, 这激起了我想去下一个emacs观摩一下的心情,尝试的结果明天再说.
相关文章
相关标签/搜索