JavaScript入门小知识点

1、console.log()

这个函数相比alert和断点不会打断函数的执行,是一个类似printf的操作

2、继承(prototype法)

var person={
    name:"yida",
    age:12,
    eat:function(){
        alert("haha");
    }
}

//使用函数构造器生成对象
function person(){
    
}
person.prototype={
    name:"yida",
    age:12;
    eat:function(){
        alert("eat");
    }
}

var p=new person();
View Code

3、作用域和闭包

```
//Uncaught ReferenceError: j is not defined
//
//JS是函数界别作用于,在内部变量可以访问外部,
//外部不能访问内部的
test();
//test()执行的时候 j还是undefined
var j=1000;

function test(){
    if(false){
        var i=10;
    }
    else{
        var t=100;
    }
    console.log(j);
}
```

//闭包 就是拿到原本自己不能拿到的东西
```

var j=100;

function test(){
    var j;
    j=10;
    var k=100;
    return function() {
        return k;
    }
}

var t=test()();
alert(t)
```
View Code

4、句柄

//此所谓添加句柄
document.getElementById("btn").addEventListener("click",function(){
        alert("haha");
    })

var x=document.getElementById("btn");
x.addEventListener("click",hello);//添加句柄

x.removeEventListener("click",hello);//删除句柄
function hello(){
}
View Code

5、单例模式

单例就是保证一个类只有一个实例,实现的方法是判断是否存在,如果不存在就创建了再返回,保证一个类只有一个。

 
单例模式作用:
1,模块之间通信
2,系统中某个类的对象只能存在一个
3,保护自己的属性和方法
 
注意:
1.注意this的使用
2.闭包容易造成内存泄露
var xiaowang=(function(argument){
    var xiaowangjia= function (message) {
        this.menling=message;
    }
    var door;

    var info={
        sendMessage:function(message){
            if(!door){
                door=new xiaowangjia(message);
            }
            return door;
        }
    }

    return info;
})();

//这种方法是静态的
var xiaoli={
    call:function(msg){
        var _xw=xiaowang.sendMessage(msg);
        alert(_xw.menling);
        _xw=null;//等待垃圾回收
    }
};

xiaoli.call("haha");

//平时开发的时候单例怎么用呢

var top ={
    init:function(){
        this.render();
        this.bind();
    },
    a:4,
    render:function(){
        var me=this;
        me.btna=$("#a");
    },
    bind:function(){
        var me=this;
        me.btna.click(function(){
            //业务逻辑取出去
            me.test();
        })
    },
    test:function(){
        a=5;
    }
}

var banner={
    init:function(){
        this.render();
        this.bind();
    },
    a:4,
    render:function(){
        var me=this;
        me.btna=$("#d");
    },
    bind:function(){
        var me=this;
        me.btna.click(function(){
            //业务逻辑取出去
            me.test();
        })
    },
    test:function(){
        //a=6;
        top.a=6;
    }
}

top.init();
banner.init();
View Code

6、策略模式

策略模式定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法变化不会影响到使用算法的客户

 
模式作用:
1.所有的这些算法都是做相同的事情,只是实现不同
2.以相同的方法调用所有的方法,减少了各种算法类与使用算法类之间的耦合
3.单独定义算法类,方便了单元测试
 
注意事项:
不仅可以封装算法,也可以用来封装几乎任何类型的规则,在要在分析过程中需要在不同时间应用不同的业务规则,就可以考虑用策略模式来封装。
//-_-|| $开头的变量 用于区分 全局变量
var $input = $("#input").val();
var val={
    isEmpty: function () {
        return false;
    },
    isTel:function(){

        return true;
    }
}

var ise=val.isEmpty($input.val());
var isTel=val.isTel($input.val());

if(!ise && isTel){
    alert("通过审核")
}

//$.fn.val
$.input.val({
    isEmpty:false,
    isTel:true
});

$("#div").animate({width:100px},100);
View Code

 

 
posted @ 2017-02-27 14:22  益达915  阅读(95)  评论(0编辑  收藏  举报