JavaScript - object - [持续更新中...]

#目录


bind / call / apply (点拨)

bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
我的理解: 允许你改变当前function 的相应this的作用

"use strict";

//this的值被bind改变了
function locate() {
    console.log(this.location)
}
function Marn(location) {
    this.location=location;
}

var kitty = new Marn('my bind');
//这里的kitty就是this 的改变者
var locateBind=locate.bind(kitty);  //强度理解.换成了kitty:this.prototype  
locateBind();

//还有这里我们换成call
var kittyCall = new Marn("my call");
locate.call(kittyCall);
//还有这里我们换成apply
var kittyApple = new Marn("my apply");
locate.apply(kittyCall);

object (ES5+)

Object.getPrototypeOf
Object.getOwnPropertyDescriptor
Object.getOwnPropertyNames
Object.create

方法创建一个拥有指定原型和诺干属性的对象
Object.defineProperty

//**控制对象属性**
var cat = {};
Object.defineProperty(cat, "name", {
  value: "Maru",
  writable: false, //写
  enumerable: true, //枚举
  configurable: false //可否配置
});
Object.defineProperty(cat, "skill", {
  value: "exploring boxes",
  writable: true,
  enumerable: true,
  configurable: true
});

Object.defineProperties
Object.seal
Object.freeze
Object.preventExtensions
Object.isSealed
Object.isFrozen
Object.keys

//这个很常用,操作对象等
var nums={
    "first":7,
    "second":14,
    "third":13
};
//这样就很容易的拿到值了
var test = Object.keys(nums);
for (var i=0;i<test.length;i++){
    console.log(nums[test[i]])
}

this (面试全解)

//example 01
function test() {
    console.log(this.m)
}
this.m=100
window.test(); //这里的this是window
//example 02
this.m=1000;
var obj={
    m:100,
    test:function(){
        console.log(this.m)
    }
}
obj.test();>>100
//example 03 闭包里面的this
this.m = 1000;
var obj = {
    m: 100,
    test: function () {
        // console.log(this.m);//100
        return function () {
            console.log(this.m)
            //这里被返回到外层函数,在window全局下. 此时的this 是1000;
        }
    }
}
obj.test()();>>1000
//example 04在DOM事件上的this指向
<!DOCTYPE html>
<html lang="en">
<body>
<input type="button" value="test" id="test" style="color: red">
</body>
<script>
    var style={
        color:"green"
    };
    function test() {
        console.log(this.style.color)
    }
    document.getElementById("test").οnclick=test;
</script>
</html>
//example 05 面向对象的this
this.a = 1000;
function test() {
    this.a = 1;
}
test.prototype.getA = function () {
    return this.a;
};
var p = new test;
console.log(p.getA())
// p调用了getA ;
// p new test构造函数, 所以最后挂载带test()函数里面的a了

JSON (高阶)

JSON.parse(text,[,reviver])

//
var result = JSON.parse('{"a": 1, "b": "2"}', function(key, value){
  if (typeof value == 'string'){
    return parseInt(value);
  } else {
    return value; 
  }
  //result.b    2

确保解析的时候是们需要的数据

JSON.stringify(value [, replacer [, space]])

JSON.stringify允许作者接受一个ECMAScript值然后转换成JSON格式的字符串。 在其最简单的形式中,JSON.stringify接受一个值返回一个字符串,

var mike = JSON.stringify({mike: "taylor"})
 mike>>'{"mike": "taylor"}'
 typeof mike >>"string"

如果replacer方法返回undefined, 则键值对就不会包含在最终的JSON中。

var nums = {
  "first": 7,
  "second": 14,
  "third": 13
}
var luckyNums = JSON.stringify(nums, function(key, value){
  if (value == 13) {
    return undefined;
  } else {
    return value;
  }
},2);//这里的2 是打印出来的缩进2个字符,在开发node 比较实用
console.log(luckyNums)>>'
{
  "first":7,
  "second":14
}'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章