js面试,原链与构造函数相关问题

js面试,原链与构造函数相关问题

一、构造函数
1.1

function Foo(name,age){
	this.name = name
	this.age = age
	this.class = 'class-1'
}
let f = new Foo('zhangsan',20)//创建一个对象
//一般书写规则,构造函数应该首字母大写

其中,new 做了什么事情呢?
1.创建了一个新对象(从上面代码中,你可以认为new创建了一个空对象这个空对象就是新对象)
2. 将构造函数的作用域赋给新对象(也就是将构造函数的作用域赋值给这个空对象)
3. 执行构造函数中的代码(为这个新对象添加属性)
4. 返回新对象。(也就是相当于在构造函数中添加了return this这条语句,然后let f这个变量指向了这个对象)

1.2
构造函数的扩展:

let a = {} //其实是 let a = new Object()的语法糖
let b = [] //其实就是 let b = new Array()的语法糖
function Foo(){}//其实是let Foo = new Function(...)

1.3
使用instanceof判断一个函数是否是一个变量的构造函数

二、原型规则
2.1

1.所有的引用类型(数组、对象、函数),都有一个__ proto __(这个是指隐式原型)属性,属性值是一个普通的对象
2.所有的函数都有一个prototype(显示原型)属性,属性值也是一个普通对象
3.所有的引用类型,__proto__属性值指向他的构造函数的prototype属性值
4.当试图寻找一个对象的某个属性值时,如果这个对象本身没有这个属性,那么会去它的 __ proto __(即它的构造函数的prototype中去寻找)
5.所有的引用类型,都具有对象特性,即可以自由扩展属性(除了‘null’以外)[这个是很重要的一点,很多数据处理报错都是因为数据对象返回为null,而我们还用对象.属性来获取值,这样往往导致报错]

//循环对象的自身属性,假设对象f已经创建
let item;
for (item in f){
//值得注意的是,高级游览器中for...in屏蔽了来自原型的属性,但是为了保证向下兼容,下面的判断语句还是很必要的
	if(f.hasOwnProperty(item)){
		console.log(item)
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值