-
原型和原型链
原型链:当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。
原型:1.所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象
2.所有函数都有一个prototype(原型)属性,属性值是一个普通的对象
3.所有引用类型的__proto__属性指向它构造函数的prototype -
prototype与__proto__的关系与区别
-
继承的实现方式及比较
(1)默认的原型继承-构造函数原型中添加属性
(2)覆盖构造函数的原型 //会导致之前的constructor丢失,若构造函数中的这个属性很重要最好手动mowei添加指回原构造函数Fn.prototype.constructor=Fn;
(3)原型混入
(4)构造函数属性继承
function Person(name,age){
this.name = name;
this.age = age;
}
function Man(name,age){
Person.call(this,name,age);
}
var man1 = new Man(“Mike”,2);
console.log(man1); -
深拷贝与浅拷贝
深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
方法:object assign({},obj);
Array.prototype.concat()3
Array.prototype.slice()
深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
方法:JSON.parse(JSON.stringifty()) //JSON.stringify将对象转化为JSON字符串 -
防抖和节流
防抖:对于短时间内连续触发的事件(上面的滚动事件),防抖的含义就是让某个时间期限(如上面的1000毫秒)内,事件处理函数只执行一次。
效果:如果短时间内大量触发同一事件,只会执行一次函数
实现:用seTimeout函数和一个变量用于保存计时,为了保护全局部纯净可以借助闭包实现
节流:
效果:如果短时间内大量触发同一事件,那么在函数执行一次之后,该函数在指定的时间期限内不再工作,直至过了这段时间才重新生效。 -
作用域和作用域链、执行期上下文
上下文(context)是用来指定代码某些特定部分中this的值
作用域(scope) 是指变量的可访问性,上下文(context)是指this在同一作用域内的值
上下文始终坚持一个原理:this永远指向最后调用它的那个对象 -
DOM常见的操作方式
1)节点属性
Node.nodeName //返回节点名称,只读
Node.nodeType //返回节点类型的常数值,只读
Node.nodeValue //返回Text或Comment节点的文本值,只读
Node.textContent //返回当前节点和它的所有后代节点的文本内容,可读写
Node.baseURI //返回当前网页的绝对路径Node.ownerDocument //返回当前节点所在的顶层文档对象,即document Node.nextSibling //返回紧跟在当前节点后面的第一个兄弟节点 Node.previousSibling //返回当前节点前面的、距离最近的一个兄弟节点 Node.parentNode //返回当前节点的父节点 Node.parentElement //返回当前节点的父Element节点 Node.childNodes //返回当前节点的所有子节点 Node.firstChild //返回当前节点的第一个子节点 Node.lastChild //返回当前节点的最后一个子节点 //parentNode接口 Node.children //返回指定节点的所有Element子节点 Node.firstElementChild //返回当前节点的第一个Element子节点 Node.lastElementChild //返回当前节点的最后一个Element子节点 Node.childElementCount //返回当前节点所有Element子节点的数目。
2)操作
Node.appendChild(node) //向节点添加最后一个子节点
Node.hasChildNodes() //返回布尔值,表示当前节点是否有子节点
Node.cloneNode(true); // 默认为false(克隆节点), true(克隆节点及其属性,以及后代)
Node.insertBefore(newNode,oldNode) // 在指定子节点之前插入新的子节点
Node.removeChild(node) //删除节点,在要删除节点的父节点上操作
Node.replaceChild(newChild,oldChild) //替换节点
Node.contains(node) //返回一个布尔值,表示参数节点是否为当前节点的后代节点。
Node.compareDocumentPosition(node) //返回一个7个比特位的二进制值,表示参数节点和当前节点的关系
Node.isEqualNode(noe) //返回布尔值,用于检查两个节点是否相等。所谓相等的节点,指的是两个节点的类型相同、属性相同、子节点相同。
Node.normalize() //用于清理当前节点内部的所有Text节点。它会去除空的文本节点,并且将毗邻的文本节点合并成一个。//ChildNode接口 Node.remove() //用于删除当前节点 Node.before() // Node.after() Node.replaceWith()
js常见面试题(二)
最新推荐文章于 2024-04-03 02:13:17 发布
本文详细介绍了JavaScript中的原型和原型链概念,包括__proto__和prototype的区别与联系。探讨了不同继承实现方式,如默认原型继承、构造函数继承和原型混入,并通过实例解释了深拷贝与浅拷贝的差异。此外,还讨论了防抖和节流技术在性能优化中的应用,以及作用域、作用域链和执行期上下文的概念。同时,列举了DOM操作的基本方法,如节点属性和操作子节点的方法。
摘要由CSDN通过智能技术生成