#目录
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
}'