十五的学习日记20160926
JavaScript
- 一个用于检测正负值的函数,可以用它辨别
-0
值.
我觉得挺好用,以后可以写到自己的工具库里.
//函数:检查传入参数是否为正数.Number=>Boolean
function isPositive(num){
if(typeof num !="number"||!Math.isNaN(num)){return false}//类型检查!
return 1/num===1/Math.abs(num)//如果一个数和他本身的绝对值相等那么就是正的,否则就是负的,此处负零为负,正零为正.
}
- 工厂模式混合模式的原理和应用
原理:
- 工厂模式: 设置加工函数,按照传入参数选择类来生成实例,返回包装结果.
- 混合模式: 类似工厂模式,但不选择类来生成实例,而是把类作为要生成对象的子类.
...算了,还是不写什么原理了,看着头大,自己写代码太少,读不懂.
- 工厂模式用例和解释:扑克牌类的写法:
需求分析:
卡牌本身: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
来源:慕课网
工具&思想
- 今天看到群里一张emacs的截图,发现emacs没有想象中的丑陋, 然后去网上了解了emacs的一些细节,比如他的无所不能,可以写文章,可以任务管理也可以编写项目计划, 这激起了我想去下一个emacs观摩一下的心情,尝试的结果明天再说.