Javascript前端面试准备二

二、原型和原型链

题目:

  • 如何准确判断一个变量是数组类型
    -arr instanceof Array //true
  • 写一个原型链继承的例子
//封装DOM查询的例子
function Elem(id){
	this.elem = document.getElementByID(id)
}

Elem.prototype.html = function(val){
	var elem = this.elem
	if(val){
		elem.innerHTML = val
		return this //链式操作
	}else{
		return elem.innerHTML
	}
}

Elem.prototype.on = function(type,fn){
	var elem = this.elem
	elem.addEventListener(type,fn)
	return this
}

var div1 = new Elem('div1')

div1.html('<p>hello 1</p>').on('click',function(){
	alert('clicked').html('<p>hello 2</p>')
})
  • 描述new一个对象的过程
  1. 创建一个新对象
  2. this指向这个新对象
  3. 执行代码,即对this赋值
  4. 返回this return this//默认有这么一行
  • zepto(或其他框架中)源码中如何使用原型链

知识点:

  • 构造函数(class)
    -大写字母开头

  • 构造函数-扩展
    -var a = {}其实是var a = new Object()的语法糖
    -var a = []其实是var a = new Array()
    -function Foo(){}其实是var Foo= new Function()
    使用instanceof 判断一个函数是否是一个变量的构造函数, eg. instanceof Array

  • 原型规则和示例

  1. 所有的引用类型(数组array、对象object、函数function)都具有对象(object)特性,即可自由扩展属性(除了null外);
  2. 所有的引用类型(数组array、对象object、函数function)都有一个__proto__(隐式原型)属性,属性值是一个普通的object.
  3. 所有的函数,都有一个prototype(显示原型)属性,属性值也是一个普通的对象。
  4. 所有的引用类型,proto(隐式原型)属性值指向它构造函数的prototype(显式原型)属性值console.log(obj.__proto__===Object.prototype) //true,
  5. 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会它的__proto__(即它的构造函数的prototype)中寻找。
  • 原型链
  • instanceof
    -用于判断引用类型属于哪个构造函数的方法 f instanceof Foo// true (判断逻辑:f的__proto__一层一层往上,能否对应到Foo.prototype, 再试着判断f instanceof Object)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值