给大家总结了一些关于面向对象,闭包函数,原型链的题,话不多说,直接上干货!!!

8 篇文章 0 订阅
2 篇文章 0 订阅

           欢迎来到我的知识乐园,希望这些题对大家有帮助。

1.创建对象的方式?

1)直接给对象绑定属性和方法

2)通过字面量创建对象

3)工厂模式

4)构造函数

5)原型对象

6)混合模式(构造函数+原型对象)

2.如何创建一个对象, 实现 属性私有方法共享?

function Obj(name,age){
this.name=name;
this.age=age;
this.fn()
}
Obj.prototype.fn=function(){
console.log(this.name);
}
var o=new Obj('张三',50)

3.new 操作符 做了什么工作?

1) 实例的时候会创建一个空的新对象

2) 将 this指向为新建的空对象

3) 将绑定到this上的属性和方法,指向空对象

4) 最后将新建的对象返出

4.prototype和_ _proto_ _关系?

原型对象 prototype:每一个函数都有一个原型对象,绑定到原型对象上的属性和方法是公共的

每一个对象上都有一个__proto__对象,只有函数对象才有prototype

__proto__是一个指针,它指的是构造它的对象的prototype

(实例化对象的__proto__ 指向构造函数的原型对象)

5.原型链是什么?

1)由于__proto__是任何对象的都有的属性,是一个指针,指的是构造函数的prototype原型对象,而该构造函数的原型对象也有__proto__,指向该构造函数所继承对象的原型对象,以此类推,会形成一条由__proto__组成的链条,该链条就是原型链,递归访问__proto__到终点,值为null对象。

2)查找属性(方法),如果本身没有,则会去__proto__中查找,(也就是去构造函数的原型对象中查找),如果构造函数中的原型对象上也没有该属性,因为构造函数也是对象,也有__proto__,那么会去它的显式原型中查找,一直到null,如果没有则返回undefined

6.对this的理解以及this指向?

this 指向函数运行时所属的对象

this 不指函数本身,也不指函数所对的作用域,指向调用此函数的对象

this 指向分为六种情况:

 1) 全局函数中的this,在全局环境下调用的时候指向window

  注意:如果全局函数内部是严格模式,则在全局环境下不指向window 指undefined

2) 函数被赋值给某个事件时,指向绑定事件的对象

3) this在对象的方法中使用时,指向的是 方法所属的对象

4)在闭包中 this 指向window

5) 在构造函数中以及构造函数的原型对象中的this,都指向构造函数的实例对象

6)箭头函数中的this 指向 箭头函数被定义的执行环境

7.通过递归方式实现深拷贝?

function deepCopy(obj){
	var obj2=Array.isArray(obj)?[]:{};
	for(var i in obj){ // 循环对象 obj 
		if(typeof obj[i]==='object'){ //判断取出的每一项是否是对象
			// 如果是对象, 则需要 再新建对象 然后再进行循环赋值
			 obj2[i]={};

			 for(var k in obj[i]){ 

			    obj2[i][k] = obj[i][k];
			 }
			obj2[i]=deepCopy(obj[i]);
		}else{
			// 如果不是对象, 则 直接赋值
			obj2[i]=obj[i];
		}
	}
	return obj2;
}

8.获取当前元素到body的距离?

function getTL(obj){
	var oT=obj.offsetTop;  // 获取当前元素到定位父级的上侧距离
	var oL=obj.offsetLeft;// 获取当前元素到定位父级的左侧距离
	var p=obj.offsetParent; // 获取当前元素的定位父级
	while(p){ // 判断定位父级是否为空
		oT=oT+p.offsetTop+p.clientTop; 
		oL=oL+p.offsetLeft+p.clientLeft;
		p=p.offsetParent;
	};
	return {left:oL,top:oT};
} 

9.面向对象编程和面向过程编程?

面向对象编程: 1) 用抽象的方式创建基于现实世界模型的一种编程方式

                          2) 将需求抽象为一个对象,在这个对象上分析它的属性和方法

                          3) 将对函数的封装转为对对象的封装

面向过程编程 : 分析问题所需要的步骤,用函数将这些步骤一步一步实现的编程方式  

10.说说你对闭包函数的理解?

闭包就是能够读取其他函数内部变量的函数,也可以把闭包简单理解成“定义在一个函数内部的函数”,它的最大用处有两个,一个是可以读取函数内部的变量,另一个是让这些变量的值始终保持在内存中。

  闭包又有什么坏处?

  1)增加了内存的消耗。

  2) 某些浏览器上因为回收机制的问题,有内存泄漏,内存溢出风险。

  3)增加了代码的复杂度,维护和调试不便

11.导航联动封装

	function getTL(obj) {
		var oT = obj.offsetTop;  // 获取当前元素到定位父级的上侧距离
		var oL = obj.offsetLeft;// 获取当前元素到定位父级的左侧距离
		var p = obj.offsetParent; // 获取当前元素的定位父级
		while (p) { // 判断定位父级是否为空
			oT = oT + p.offsetTop + p.clientTop;
			oL = oL + p.offsetLeft + p.clientLeft;
			p = p.offsetParent;
		};
		return { left: oL, top: oT };
	} 

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值