`

再理解jQuery;delete原型属性

 
阅读更多

以前用jQuery的时候曾粗略看了它的源码,但却不求甚解。以致一直以为jQuery()返回的是一个数组,实际上只是一个PlainObject而已。

alert({}.toString.call(jQuery())) //显示为[object Object]

现在想想也觉得自己无知。倘若真是数组,那么jQuery的设计岂不是侵入式的修改了Array的原型。这种设计并不被推荐,jQuery又怎会使用。当初之所以有那样的想当然是因为可以这样使用:

jQuery().length
jQuery()[0]

 实际上length和0都是jQuery()返回的对象上的属性而已。通过以下代码检测即可知晓:

jQuery().hasOwnProperty("length") === true
jQuery().hasOwnProperty("0") === true

 ===============================================================================

还有个关于原型的问题:

function Parent(){
...
}
Parent.prototype={
    isBoy : function(){
        return true;
    }
}

var p1 = new Parent(),
      p2 = new Parent();

delete p1.isBoy;

alert(p2.isBoy());//这里是true还是报错呢?isBoy被删除了?

 按理说p1没有自己的isBoy属性,它会到它的原型上(Parent.prototype)找,发现有原型上有isBoy,于是就用原型的isBoy作为自己的使用。我们知道p1和p2的isBoy都指向原型的isBoy,也就是isBoy始终只有一个。那么delete p1.isBoy的时候 是不是就把原型上的isBoy删掉了呢?乍看好像是这么回事。

但若深入分析,即可知道p1.isBoy只是个指针,指向Parent.prototype.isBoy。而delete p1.isBoy只是删除了指针的值,并没有删除Parent.prototyep.isBoy。所以p2.isBoy是依然可以访问到的。

 

可参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete

 

  • 大小: 10.5 KB
  • 大小: 30.4 KB
分享到:
评论

相关推荐

    【叨、校长】PhoneGap+jQuery Mobile+Rest 访问远程数据

    - 自描述性:响应应包含足够的元数据,使客户端能理解数据格式和下一步操作。 4. 使用PhoneGap访问REST API: PhoneGap通过插件机制暴露了设备API,如XMLHttpRequest(AJAX)来发送网络请求。开发者可以使用...

    jQuery中$.extend()用法实例

    - 对于从原型链继承的属性,如果`deep`为`true`,它们也会被复制。 总结,`$.extend()`是jQuery中的一个重要工具,它简化了对象属性的合并和扩展操作,增强了代码的灵活性和可维护性。在实际开发中,合理利用`$....

    json实现添加、遍历与删除属性的方法

    `for...in`循环会遍历对象的所有可枚举属性,包括其原型链上的属性。在这个例子中,`index`变量会依次获取到`obj`对象的所有属性名,然后通过`obj[index]`获取对应的属性值。 ### 删除属性 删除JSON对象的属性可以...

    Web开发资料大全(文档手册案例等) 2【CSS JS Dom JQuery Ajax Dojo Prototype ASP SQL 截图工具 颜色选择 】

    4. **JQuery**:JQuery是一个流行的JavaScript库,简化了DOM操作、事件处理、动画和Ajax交互。它的API简洁易用,能快速实现常见功能,如元素选择、DOM操作和特效。 5. **Ajax (异步JavaScript和XML)**:Ajax是一种...

    jQuery与ExtJS之选择实例分析

    总结来说,jQuery适合那些寻求轻量级解决方案和快速原型开发的项目,它的表格排序功能依赖于第三方插件,但整体实现较为简单。而ExtJS提供了一整套完整的UI组件和数据管理机制,适用于构建复杂的Web应用程序,但学习...

    自己收集的 学习资料

    学习JavaScript,你需要理解其基本语法、变量、数据类型、控制结构(如if语句和循环)、函数、对象和原型链。此外,还要掌握异步编程的概念,如回调函数、Promise和async/await。JavaScript还有丰富的库和框架,如...

    前端常见问题整理.压缩包

    理解HTTP方法(GET、POST、PUT、DELETE等)、状态码(200、404、500等)、头部信息、缓存策略以及跨域请求是每个前端开发者必备的基础知识。同时,HTTPS的安全性、WebSocket的实时通信以及HTTP/2的性能提升也是现代...

    史上最全的API帮助文档,chm格式,网页编码

    它包括SELECT语句用于检索数据,INSERT用于添加新记录,UPDATE用于修改现有记录,而DELETE则用于移除数据。除此之外,SQL还包括数据库的创建、修改和删除等高级功能。掌握SQL是任何后端开发者的必备技能,尤其是在大...

    第6章 前端面试技能拼图4: 知识广度 - 从前端到全栈

    2. **CSS**:深入理解CSS选择器,如ID、class、伪类和属性选择器,以及CSS预处理器(如Sass、Less)和PostCSS的使用,能够提升代码组织和维护效率。对CSS布局模式,如float、Flexbox和Grid的熟练运用,可以解决复杂...

    JavaScript快速查询手册

    原型链是JavaScript实现继承的方式,每个对象都有一个`__proto__`属性,指向其构造函数的原型对象。 3. **数组与集合**:JavaScript提供了数组(Array)、Set(无重复元素集合)和Map(键值对集合)等数据结构,...

    WEB开发与设计速查手册(汇总压缩包)

    学习JavaScript时,会接触到函数、对象、原型链等高级概念,以及像jQuery这样的库,它简化了DOM操作和事件处理。 SQL(结构化查询语言)是用于管理关系数据库的语言。掌握基本的SELECT语句,能从数据库中检索数据;...

    简单的JAVA EE购物商城

    【标题】"简单的JAVA EE购物商城"所涉及的知识点涵盖了Java企业级开发的多个核心领域。这个项目是一个基于Java的电子商务平台实现,旨在提供基本的在线...对于有经验的开发者,它可以作为一个快速原型或者扩展的基础。

    学习心得(C#,SQL,javascript,etc...

    理解和熟练运用SQL,包括SELECT查询、INSERT、UPDATE、DELETE操作,以及JOIN、GROUP BY、HAVING等高级查询技术,是每个数据库开发者的基础。在工作中,你可能会遇到优化查询性能的问题,此时,索引的创建和使用、...

    PHP5.3 MySQL5.1 CSS 3.3 JavaScript参考手册

    3. 对象字面量和原型链:理解对象创建方式和原型之间的关系,实现面向对象编程。 4. DOM操作:学习如何通过JavaScript操纵HTML文档对象模型,实现动态网页效果。 5. AJAX(异步JavaScript和XML):用于创建无刷新的...

    duDialog:一个简单的材质概念对话框插件(无需jQuery)

    document.getElementById('deleteButton').addEventListener('click', function() { deleteDialog.show(); }); ``` ### 总结 `duDialog`插件以其无jQuery依赖、简洁API和材质设计的特点,为开发者提供了便捷的...

    金山软件2011年网站开发笔试题

    可能还会涉及到jQuery等库的使用,以及对ES5或早期版本的深入理解。 3. **服务器端技术**:可能涉及PHP、Java、Python等后端编程语言的基础知识,包括语法、面向对象编程、MVC设计模式等。同时,会测试HTTP协议的...

    前端高质量面试题资源汇总

    - 了解原型链,它是JavaScript实现继承的基础,每个对象都有`__proto__`指向其构造函数的原型。 - 闭包是一种函数特性,它可以访问并修改外部作用域的变量,常用于封装私有变量和实现模块化。 - ES6引入了许多新...

    前端 JavaScript js 联系人 分页

    JavaScript是一种解释型的、基于原型的对象导向语言,其主要运行环境是浏览器。它提供了丰富的DOM(文档对象模型)接口,用于操作HTML元素,以及AJAX(异步JavaScript和XML)技术,用于后台与服务器的数据交换。 在...

    java面试资料

    面试者需了解DOM操作、事件处理、AJAX、闭包、原型链等核心概念,并可能涉及jQuery、Vue.js、React.js等库或框架。 对于Java开发者来说,熟练掌握上述技术和框架是必备的。面试通常会通过编程题、场景分析、问题...

    JavaScript性能

    3. 使用完毕后释放内存,比如将不再使用的变量设置为null或者使用delete操作来清除对象属性。 在变量查找方面,提升性能的做法有: 1. 变量声明时带上var或let关键字,这样它们的作用域就会限定在当前函数或模块内...

Global site tag (gtag.js) - Google Analytics