(一)基本问题

JS的数据类型(不是数据结构)分:简单数据类型(undefined\null\boolean\string\number\symbol)、复杂数据类型(object).

对象是可变的键值对的集合,最关键是对象是无类型(class-free)的,也就是说对于新的属性值类型没有要求。属性名可以是name(标识符)、string(包括空字符串),很适合各类数据管理。最牛逼的机制是对象之间的非传统意义上的继承或是说委托更好一些;可以减少对象初始化的时间和内存。而且这是一种不同于类的新的编程思路。

对象的字面量表示法的属性名类型是字符串,虽然有时候输入的可能并不是字符串,但实际上是被转为了字符串;但若不符合标识符规则时就要显式的使用字符串。这在检索时会表现出来。对象查询属性时若找不到(包括原型链)返回undefined。可以使用"[]"、"."来获得,符合name规范时使用点访问法;其余使用[]访问法。若已有属性会被覆盖,若不含属性可以新建属性。

对象在堆内存中不会被复制,复制的是对象的引用。所以传递的函数、数组等都是引用而已。

(二)原型链问题

原型链是一种内部机制,我在我得第一篇博客已经表达过这个问题。就算根本不设置也会存在。对象有设置对象原型的方法DC原来提出有:

  if ( typeof Object.beget !== "undefined") {
Object.create = function (obj) {
function F () {}
F.prototype = obj;
return new F();
}
}

另外,必须指出一下问题:使用返回的new F()的内部原型链由F.prototype更新。原型关系是一种动态关系,原型链中更新的时候,查找时会对其他立即显示。

对象属性的查找先从对象开始,然后会向原型链中查找。可以使用typeof来大致做一下过滤。

可以使用for/in语句来枚举对象的属性,但不能保证出来的顺序;同时还会枚举原型链的。可使typeOf和obj.hasOwnProperty()来过滤。如:

  for ( var key in obj ) {
if (obj.hasOwnProperty(key)) {
if ( typeof key !=="function") {
//代码
} } }

可以使用delete来删除对象的属性,而不会修改原型链。

(三)减少全局变量污染

由于JS没有连接器,编译单元的顶级变量会出在全局变量中。为了减少变量污染,可以一个公共的接口来包含全局资源或使用闭包(与词法作用域相关)。

(四)其余问题

实际上对象的问题很复杂,这里不写了,以后陆续会有许多关于对象的问题。

JS 精粹(三)的更多相关文章

  1. 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...

  2. JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构

    JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...

  3. HTML5结合CSS的三种方法+结合JS的三种方法

    HTML5+CSS: HTML中应用CSS的三种方法 一.内联 内联样式通过style属性直接套进HTML中去. 示例代码 <pstylepstyle="color:red" ...

  4. 异步加载js的三种方法

    js加载时间线 : 它是根据js出生的那一刻开始记录的一系列浏览器按照顺序做的事,形容的就是加载顺序,可以用来优化什么东西,理论基础,背下来. 1.创建Document对象,开始解析web页面.解析H ...

  5. (一)JQuery动态加载js的三种方法

    Jquery动态加载js的三种方法如下: 第一种: $.getscript("test.js"); 例如: <script type="text/javascrip ...

  6. js中三种定义变量 const, var, let 的区别

    js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...

  7. 玩转Node.js(三)

    玩转Node.js(三) 上一节对于Nodejs的HTTP服务进行了较为详细的解析,而且也学会了将代码进行模块化,模块化以后每个功能都在单独的文件中,有利于代码的维护.接下来,我们要想想如何处理不同的 ...

  8. js获取三天后的日期

    js获取三天后的日期 setDate getNowAddTreeFormatDate() { var date = new Date(); date.setDate(date.getDate()+3) ...

  9. Vue.js+vue-element搭建属于自己的后台管理模板:更深入了解Vue.js(三)

    前言 上一章我们介绍了关于Vue实例中一些基本用法,但是组件.自定义指令.Render函数这些放到了本章来介绍,原因是它们要比前面讲的要难一些,组件是Vue.js最核心的功能,学习使用组件也是必不可少 ...

随机推荐

  1. javascript常用的内置对象实用操作

    1.indexOf() 方法  -----这个方法比较常用 返回某个指定的字符串值在字符串中首次出现的位置 使用格式:stringObject.indexOf(substring, startpos) ...

  2. XSD (xml Schema Definition)

    .xsd文件是定义DataSet的XML文件,利用XML文件的结构优势容易可视化地设计DataSet,设计完它会生成相应的.cs文件,里面的内容就是对应的类型化的DataSet.你的代码里的DataA ...

  3. NOPI 导出excel 通用方法

    public static byte[] ExportExcel<T>(Dictionary<string, string> columnsHeader, List<T& ...

  4. L9-3.安装PHP软件包

    安装扩展工具包: 查看是否安装成功: 做软连接: 安装libxml 先安装python: 做软连接: 同样安装 libmcrypt和mhash make && make install ...

  5. Sybase Power Designer 16.5破解版下载

    http://pan.baidu.com/s/1ddsjs  下载后正常安装,然后将压缩文件里的dll文件拷到安装目录下覆盖原文件,启动Power Designer后,选择help-->abou ...

  6. Your build settings specify a provisioning profile with the UUID, no such provisioning profile was found的解决方案

    在Archive项目时,出现了“Your build settings specify a provisioning profile with the UUID “”, however, no suc ...

  7. Cordova了解

    概述 Cordova让我们可以使用HTML.JS以及CSS开发跨平台App的公共部分(整个App就是一个WebView或者或者嵌入到本地组件中),与原生API的交互通过Cordova插件实现. 安装配 ...

  8. raspberrypi VNC server

    安装apt-get install tightvncserver tightvnc-java 启动vncserver -name vnc_raspi -depth 24 -geometry 800x6 ...

  9. 安装ngix

    第一步:解压源码包 第二步:./configure -->这个时候会提示缺少PCRE 这个时候要安装yum -y install pcre-devel 第三步:./configure --> ...

  10. 如何修改Struts2 FiledError样式

    有时候,使用Struts2的<s:fielderror />标签还是比较好的.但是这个标签本来的样式实在很难看,不但换行,而且有个大大的黑点.一看就知道用了<ui><li ...