前端菜鸟查漏补缺--js篇

12 篇文章 0 订阅


出来工作已经两三年了,呆过的公司都是小型企业,在跳槽之前都觉得自己技术很厉害了,但是在经过面试之后才知道自己差很多东西。就算说是前端最基础的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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值