码迷,mamicode.com
首页 > Web开发 > 详细

js笔记

时间:2016-03-09 12:46:01      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

引用

对象通过引用来传递,它们永远不会被拷贝。

var a = {
    name: ‘a‘
}
var b = a
b.name = ‘bconsole.log(a.name)     // b

这里牵扯出 JavaScript 深拷贝和浅拷贝的问题
上例是浅拷贝

深拷贝见下:

var deepCopy= function(source) { 
    var result={};
    for (var key in source) {
      result[key] = typeof source[key]===’object’? deepCoyp(source[key]): source[key];
   } 
   return result; 
}

此时 var b = deepCopy(a) 得到的 b 就和 a 没有引用关系,即修改 b 不会影响 a 了

创建一个对象时,可以选择某个对象作为它的原型:

var o = {o1:1,o2:function(){alert(1)}}
function F(){}
F.prototype = o
var f = new F()


一个函数被保存为对象的一个属性时,即为一个方法当一个方法被调用时,this 被绑定到该对象
var dog = {
    name : ‘xxx‘ ,
    leg:{
        sum : 4 ,
        move:function(){
            console.log(this) ; //Object,是leg对象,而不是dog对象,下面证明了
            alert(this.name) ; //underfined
            alert(this.sum) ; //4
        }
    }
}
dog.leg.move();

call:
var dog = {
    leg : 4 ,
    color:‘yellow‘
}
var color = ‘red‘ ;
function t(){
    alert(this.color) ;
}
t(); // red , 因为指向this在函数中调用指向window
t.call(dog); //yellow , 把t()的作用域指向了dog


try catch 能捕捉throw抛出的异常

function add(a,b){
    if(typeof a!==‘number‘ || typeof b!==‘number‘){
        throw {
            name: ‘TypeError‘,
            message: ‘add needs numbers‘
        }
}
    return a + b;
};
function a(){
    try{
        add(‘1‘,3);
    }catch(e){
        console.log(e.name)
        console.log(e.message)
    }
}
a();

 

给类型增加方法:

Number.prototype.integer = function(){
    return Math[this < 0 ? ‘ceiling: ‘floor‘](this) //this指向实例
}

var num = 10/3
console.log(num.integer())  ;   // 3


var o = (function(){
    var val = 0;
    return {
        addVal: function(){
            val += 1
        },
        getVal: function(){
            console.log(val)
        }
    }
})()//val外部不能访问,闭包

判断是否是数组或对象:
var is_array = function(value){
    return value && 
        typeof value === ‘object&&
        typeof value.length === ‘number&&
        typeof value.splice === ‘function&&
        !(value.propertyIsEnumerable(‘length‘))
}
var toString = Object.prototype.toString
function isObject(obj) {
  return toString.call(obj) === "[object Object]"
}
function isString(obj) {
  return toString.call(obj) === "[object String]"
}
function isArray(obj) {
  return toString.call(obj) === "[object Array]"
}
function isFunction(obj) {
  return toString.call(obj) === "[object Function]"
}
 



 

js笔记

标签:

原文地址:http://www.cnblogs.com/kekang/p/5257504.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!