热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端面試題積聚

建立對象的體式格局1、工場情勢在函數里,new一個Object,然後依據傳入的參數給該對象增加屬性,末了返回該對象。題目:沒法曉得一個對象的範例。2、組織函數情勢題目:每一個要領都

建立對象的體式格局

1、工場情勢

在函數里,new 一個 Object,然後依據傳入的參數給該對象增加屬性,末了返回該對象。題目:沒法曉得一個對象的範例。

2、組織函數情勢

題目:每一個要領都要在每一個實例上從新建立一遍。處理:在全局作用域中定義全局函數。固然,這會致使封裝性很差。

3、原型情勢

每一個函數都有一個 prototype(原型)屬性,這個屬性是一個指針,指向一個對象(指向該函數的原型對象),而這個對象的用處是包含能夠由特定範例的一切實例同享的屬性和要領。假如根據字面意思來明白,那末 prototype 就是經由過程挪用組織函數而建立的誰人對象實例的原型對象。運用原型對象的優點是能夠讓一切對象實例同享它所包含的屬性和要領。

瑕玷:原型中一切屬性是被許多實例同享的,這類同享關於函數異常適宜。然則關於包含援用範例值的屬性題目就突出了

4、組合運用組織函數情勢和原型情勢

組織函數情勢用於定義實例屬性,而原型情勢用於定義要領和同享的屬性。
效果,每一個實例都邑有本身的一份實例屬性的副本,但同時又同享着對要領的援用,最大限制地節省了內存。別的,這類混成情勢還支撐向組織函數通報參數;可謂是集兩種情勢之長。

5、動態原型情勢

在組織函數中這麼寫同享的要領和屬性:

// 要領
if (typeof this.sayName != 'function') {
Person.prototype.sayName = function() {
alert(this.name);
};
}

6、寄生組織函數情勢

基本思想:建立一個函數,該函數的作用僅僅是封裝建立對象的代碼,然後再返回新建立的對象。

function Person(name, age, 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('Amy', 18, 'student');
friend.sayName(); // Amy

組織函數在不返回值的情況下,默許會返回新對象實例。而經由過程在組織函數的末端增加一個 return 語句,能夠重寫挪用組織函數時返回的值。

用法:這個情勢能夠在特別的情況下用來為對象建立組織函數。假定我們想建立一個具有分外要領的特別數組。因為不能直接修正 Array 組織函數,因而能夠運用這個情勢。

function SpecialArray() {
// 建立數組
var values = new Array();
// 增加值
values.push.apply(values, arguments);
// 增加要領
values.toPipedString = function() {
return this.join('|');
};
// 返回數組
return values;
}
var colors = new SpecialArray('red', 'green', 'blue');
alert(colors.toPipedString()); // red|green|blue

關於寄生組織函數情勢,有一點須要申明:
起首,返回的對象與組織函數或許與組織函數的原型屬性之間沒有關係;也就是說,組織函數返回的對象與在組織函數外部建立的對象沒有什麼差別。為此,不能依靠 instanceof 操作符來肯定對象範例。

用 new 挪用組織函數現實閱歷了4個步驟

  • 1 建立一個新對象;
  • 2 將組織函數的作用域賦給新對象(因而 this 就指向了這個新對象);
  • 3 實行組織函數中的代碼(為這個新對象增加屬性);
  • 4 返回新對象。

明白原型對象

一切函數都有一個 prototype 屬性,這個屬性指向函數的原型對象

在默許情況下,一切原型對象都邑自動獲得一個 constructor (組織函數)屬性,這個屬性是一個指向 prototype 屬性地點函數的指針
eg. Person.prototype.cOnstructor=> Person。

當挪用組織函數建立一個新實例后,該實例的內部將包含一個指針(內部屬性[[Prototype]]),指向組織函數的原型對象。注重:這個銜接存在於實例與組織函數的原型對象之間,而不是存在於實例與組織函數之間。實例 => 組織函數的原型對象

《前端面試題積聚》

推斷某個實例的原型指針是不是指向某個函數的原型對象:

Person.prototype.isPrototypeOf(person1) // true
Object.getPrototypeOf(person1) === Person.protype // true

hasOwnProperty() 要領:檢測一個屬性是存在於實例中,照樣存在於原型中。只要存在於實例中時,才返回 true。
in 操作符:實例和原型中的屬性都能訪問到。
同時運用 hasOwnProperty() 要領和 in 操作符,就能夠肯定該屬性究竟是存在於對象中,照樣存在於原型中。

Object.keys() 要領:獲得對象上一切可羅列的實例屬性。
Object.getOwnPropertyNames() 要領:獲得一切實例屬性(包含不可羅列屬性)。

重寫原型會怎樣?

Person.prototype = {…}:
我們將 Person.prototype 設置為即是一個以對象字面量情勢建立的新對象。 終究效果雷同,但有一個破例:constructor 屬性不再指向 Person 了。前面曾引見過,每建立一個函數,就會同時建立它的 prototype 對象,這個對象也會自動獲得 constructor 屬性。而我們在這裏運用的語法,本質上完整重寫了默許的 prototype 對象,因而 constructor 屬性也就變成了新對象的 constructor 屬性(指向 Object 組織函數),不再指向 Person 函數。此時,只管 instanceof 操作符還能返回準確的效果,但經由過程 constructor 已沒法肯定對象的範例了。

《前端面試題積聚》

完成繼續的體式格局

1、原型鏈繼續


推荐阅读
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
author-avatar
手机用户2602909197
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有