编程之家收集整理的这篇文章主要介绍了前端面试题集锦-2021年前端面试题收集题库1,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随编程之家小编过来看看吧!
new
@H_301_8@
继承
,继承部分通用属性@H_301_8@
function Student(name,sex){
this.name = name
this.sex = sex
this.sayName = function(){
console.log(this.name)
}
}
var student_1 = new Student('张三','male')
@H_301_8@
new
关键字@H_301_8@
new
语句@H_301_8@
this
对象@H_301_8@
new
动作,无法快速创建@H_301_8@
new
关键字 function factory(name,sex){
var obj = new Object()
obj.name = name
obj.sex = sex
obj.sayName = function(){
console.log(this.name)
}
return obj
}
var person_1 = factory('zhangsan','male')
var person_2 = factory('lisi','female')
@H_301_8@
每个函数都有一个原型属性指针prototype
,指向一个原型对象,所有实例的该属性指向同一个对象,并不会重复创建对象,所以再原型对象里面添加属性,可以避免实例重复创建对象的性能浪费
```:javacsript
function student_proto(){
}
student_proto.prototype.sayNme = funciton(){
console.log(this.name)
}
student_proto.prototype.sex = 'male'
student_proto.prototype.name = 'zhangsan'
var student_1 = new student_proto()
```
@H_301_8@
如果实例上没有某个属性,就会往上向原型链上查找,会拿到prototype上面的统一的一个对象属性
@H_301_8@如果实例上有这个属性则会直接返回实例属性,如果原型链上也没有这个属性那么就会返回Undefined
@H_301_8@限制:实例对原型对象引用属性的修改会修改所有实例的原型属性,没法做到独立性
@H_301_8@function Student(name,sex,grade){
this.name = name;
this.sex = sex;
this.grade = grade;
}
Student.prototype.sayName = function(){
console.log(this.name);
}
Student.prototype.school = 'Joooh school';
@H_301_8@
function Person(name,age,job){
//属性
this.name = name;
this.age = age;
this.job = job;
//方法
if (typeof this.sayName != "function"){
Person.prototype.sayName = function(){
alert(this.name);
};
}
}
var friend = new Person("Nicholas",29,"Software Engineer");
friend.sayName();
@H_301_8@
原理:Javascript 中构造函数如果有返回值的情况会怎么样
@H_301_8@所谓寄生构造函数就是创建一个函数,然这个函数只是封装创建对象的代码,然后再返回新创建的对象。
```:javascript
function Person(name,job){
var o = new object();
o.name = name;
o.age=age;
o.job=job;
o.sayName = function(){
alert(this.name)
}
return o;
}
var friend = new Person(name1,age1,job1)
friend.sayName(); // name1
```
@H_301_8@
构造函数里面通过一个函数返回引用对象,不推荐使用,并且无法通过Instanceof
判断所属关系
promise
resolve
和reject
方法,将promise状态置为resolved
和rejected
,promise对象会在状态转变时自动调用resolve
回调或者是reject
回调@H_301_8@
async/await
next()
生成,下一个序列的可迭代属性,在手动调用next
方法时,只要返回值done
不是true
,则会阻塞下一次next()
的调用@H_301_8@
next
的阻塞作用,使用async
和await
达到异步阻塞,在前者执行完之前不会执行后者,达到异步的效果@H_301_8@
Promise
同时使用@H_301_8@
document.cookie
在赋值时是设置单个cookie
,但是获取document.cookie
的时候是返回所有的cookie@H_301_8@
exires=时间戳
exires键值对,浏览器就会立刻删除该cookie键值对,注意此处的时间戳必须是UTC或者是GMT时间不能是本地时间@H_301_8@
document.cookie
=> .split(';')
=>拆分成数组,for of
遍历,在需要修改的键值对后面进行添加exire
键值对@H_301_8@
attribute
: 特性,特性节点(attribute node
),每个dom
节点都有有个attribute
属性用来存储特定的attribute node
属性节点@H_301_8@
property
:属性,每个dom节点,如果当作普通Object看,property就是存储在Object中的一个键值对@H_301_8@
attribute
需要setAttribute
方法设置,property
直接.
语法设置@H_301_8@
attribute
需要removeAttribute
方法设置,property
则是使用Object
的delete
方法@H_301_8@
defer
和 async
属性对脚本加载的意义不一样@H_301_8@
defer
延时即使脚本加载完成,也会等待html解析完毕再执行脚本,而 async
则是异步加载脚本,脚本一加载完成则会立即执行脚本,可能还是会阻碍html解析@H_301_8@
instanceof
object
instanceof
Object
右边参数是否存在左右对象的原型链上,存在返回 true 不存在返回 false@H_301_8@
constructor
@H_301_8@
hasownproperty
@H_301_8@
// 1. 使用 require 方法加载 fs 核心模块
var fs = require('fs')
// 2. 读取文件
// 第一个参数就是要读取的文件路径
// 第二个参数是一个回调函数
// 成功
// data 数据
// error null
// 失败
// data undefined没有数据
// error 错误对象
fs.readFile('read.txt',function (error,data) {
// 在这里就可以通过判断 error 来确认是否有错误发生
if (error) {
console.log('读取文件失败了')
} else {
console.log(data.toString())
}
})
@H_301_8@
function readAjaxFile(url) {
// 创建xhr
var xhr = new XMLHttpRequest();
// 监听状态
xhr.onreadystatechange = function() {
// 监听状态值
if(xhr.readyState === 1 && xhr.status === 200) {
console.log(xhr.responseTest)
}
}
// 打开请求
xhr.open('GET',url,true)
// 发送数据
xhr.send(null)
}
let file = document.queryselector('file-input')[0].file[0]
let reader = new FileReader()
reader.readAsText(file)
reader.onload = function(data) {
console.log(data,this.result);
}
@H_301_8@
以上是编程之家为你收集整理的前端面试题集锦-2021年前端面试题收集题库1全部内容,希望文章能够帮你解决前端面试题集锦-2021年前端面试题收集题库1所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!