十五的学习日记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())
见代码如下

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观摩一下的心情,尝试的结果明天再说.
原文地址:https://www.cnblogs.com/always-naive/p/5933821.html