出来工作已经两三年了,呆过的公司都是小型企业,在跳槽之前都觉得自己技术很厉害了,但是在经过面试之后才知道自己差很多东西。就算说是前端最基础的html+css+js,自以为掌握得很不错了,其实还差得很远。就单js来说,由于自己缺乏对js底层技术的思考,所以一直不知道js的原型链。以为自己技术已经可以了,其实差得很远,包括一些很基础的运用,在之前的公司安于现状都没有进行学习,现在想来,真是浪费了大把的时间。这篇文章主要就是用于我在遇到自己不熟悉的js部分的一个记录,希望自己的技术越来越好吧。
call() 和apply()
call()和apply(),在js的中是很常见的操作。主要是对某一个对象调用另一个对象的方法。call()和apply()最大的差别在于用于处理的参数。call()的参数是一个一个的。apply()的参数可以传一个数组。
call() 方法分别接受参数。
apply() 方法接受数组形式的参数。
例:
Math.max(1,2,3);//我们都知道这是一个数学求最大数的方法。我们在数组中没有这种方法,那我们应该怎么求一个数组的最大值呢。
Math.max.apply(null,[1,2,3,4,5,6]);//我们可以同样获得我们传入数组的最大值为6。
Math.max.call(null,1,2,3,4,7,5,8,9);//我们可以得到最大值结果为9
我们在自已定义的时候参考如下:
var object={
fun:function(){
return this.name+","+this.age;
}
}
let data={
name:"离",
age:"123124",
}
object.fun.call(data);//"离,123124"
我们可以看出相当于是基于数据data运行了object.fun();
闭包
关于闭包,自己总是一知半解。下面直接看一个代码
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
//最后答应出来计数器的值是3。
Getter 和 Setter,Object.defineProperty()
为什么使用 Getter 和 Setter?
-它提供了更简洁的语法
-它允许属性和方法的语法相同
-它可以确保更好的数据质量
-有利于后台工作
其实在我看来,getter和setter在和普通定义在对象里面的function并没有太大差别。可能是现在自己的知识还不能理解得很到位。以后若有更深的理解再来补充。
getter和setter在调用时候,不同于普通函数的调用方法,调用的时候需要作为一个对象属性调用,既不需要();
实例:
var object={
counter:0,
add:function(value){
//使用这种定义方法的时候,需要引用的时候写法如下:object.add()
this.counter+=value;
},
set add1(value){
//使用set定义的时候,在外面引用的话,写法如下:object.add1;
this.counter+=value;
},
get increment(){
this.counter++;
}
};
object.add(3);
object.add1=4;
object.increment;
object.counter;
//8
需要注意是getter的函数不能带参数,setter的函数一定要记得带参数。
Object.defineProperty() 也可以添加setter和getter。接上面的例子
Object.defineProperty(object,"reset",{
set:function(value){
this.counter=value;
}
})
object.reset=0;
对象构造器
当我们需要创建相同‘数据类型’的许多对象的‘蓝图’。创建一种‘对象类型’的方法,就是使用对象构造器函数;
例:
function Person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
var li=new Person("李","12","女");//我们就可以建立多个同类型数据格式的对象;而且我们可以对li添加属性
li.price=100;//可以直接打印对象 li 查看到我们已经添加成功了。
Person.firstName="first";
//我们向Person新增了属性,可是该属性只有Person能访问到,li 却无法访问。如果我们需要添加进Person的方法被之后创建的所有对象所调用,我们可以直接将方法添加进Person中。
例:
function Person(name,age,sex){
this,name=name;
this,age=age;
this,sex=sex;
this.price=199;
}
li=new Person("柳兄",34,"男");
Person.prototype.fun=function(){
return this.name+","+this.age;
}
li.fun();//柳兄,34
我们此时调fun()方法,就可以得到对应的数据了。
ajax
常用的是jquery中的ajax请求。在线了解一下XMLHttpRequest。
function httpLoad(){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText)
}
};
xhttp.open("GET", "https://www.w3school.com.cn/example/js/ajax_info.txt", true);
xhttp.send();
}