js对象小结
对象是js的基本数据类型,准确来说除了字符串,数字,boolean值,null与undifine之外,js中的值都是对象。js中的对象是一种复合值,他将很多值(原始值或其他对象)聚合在一起,可以通过名字来访问这些值,其实看上去就像是一个属性的无序集合,每个属性都是一个名/值对。属性名是字符串,可以把对象看成是从字符串到值得映射。这种现象就像我们平时知道的“关联数组”,“数据字典”等等(只是叫法不同而已)。除了这种映射关系外,最主要的核心就是js的对象可以通过“原型继承”来继承属性与方法。另外由于对象时可变的,我们是通过引用而非值来操作对象。
var empty = {}; // 定义一个空对象
var ob1 = {x:1,y:2}; // 定义两个属性的对象
var ob2 = { // 定义复杂的对象
"main title" : "three object",
"main-t" : 123, // 特殊字符要加引号
"for" : {x:"123",y:123}, // for是保留字必须用引号
};
var arr = new Array(); // 使用内置构造函数创建一个新的数组对象,相当于var arr = [];
var obg = new Object(); // 使用内置构造函数创建一个新的数组对象,相当于var arr = {};
function UserDefineObj (x,y) { // 自定义的构造函数
this.x = x;
this.y = y;
}
var user = new UserDefineObj(1,2); // 使用自定义的构造函数创建一个对象
var ob1 = Object.create ( {x : 1, y : 2 } ); // 使用后面的参数(对象直接量)作为ob1对象的原型。
如果想创建一个空对象(比如通过{ }或newObject()创建的对象)可以使用Object.prototype作为这个方法的参数。例如:
var ob2 = Object.create ( { } ) ; // 创建一个空对象
如果传入参数为null,将会创建一个没有任何原型的空对象,但这个对象没有任何继承的方法,甚至不包括基础的方法,如toString()等。
var ob3 = Object.create (null); // ob3不继承任何属性和方法
function UserDefineObj (x,y) { // 自定义的构造函数
this.x = x;
this.y = y;
}
var user = new UserDefineObj(1,2); // 使用自定义的构造函数创建一个对象
console.log(user.toString()); // toString这个方法就是继承自Object.prototype
关于原型与原型链推荐博客:http://www.cnblogs.com/TomXu/archive/2012/01/05/2305453.html
function UserDefineObj (x,y) { // 自定义的构造函数
this.x = x; // 声明自定义属性x,也成为自有属性
this.y = y; // 声明自定义属性y
}
UserDefineObj.prototype.allx = 123; // 给构造函数的原型对象添加属性allx
var user = new UserDefineObj(1,2); // 使用自定义的构造函数创建一个对象
console.log(user.x); // 输出:1
console.log(user.allx); // 输出:123
由于js是一种弱类型的语言,在不声明变量的情况下,解析器会自动的再运行的时候创建这个变量(全局变量)。
function UserDefineObj (x,y) { // 自定义的构造函数
this.x = x; // 声明自定义属性x,也成为自有属性
this.y = y; // 声明自定义属性y
}
UserDefineObj.prototype.allx = 123; // 给构造函数的原型对象添加属性allx
var user = new UserDefineObj(1,2); // 使用自定义的构造函数创建一个对象
var ob = new UserDefineObj(4,5);
console.log(user.x); // 输出:1
console.log(ob.x); // 输出:4
console.log(user.allx); // 输出:123
console.log(ob.allx); // 输出:123
user.allx = 110; // 更改user对象的属性,对ob对象没有影响
console.log(user.allx); // 输出:110
console.log(ob.allx); // 输出:123
从上面程序的输出可以看出user对象和ob对象创建了两个不同的对象,这两个对象同时共同继承自原型对象UserDefineObj.prototype。由于是不同的对象,所以对属性的值得改变,对其他的对象没有影响。
js对象小结的更多相关文章
- 在这个看脸的世界,该如何优雅的创建JS对象
Javascript是一门解释型的语言,是基于对象的,严格来说并不怎么符合的面向对象的标准,显著的特点就是函数就是“一等对象”,与传统的面向对象语言不同的时,Javascript有“一千种”方法来创建 ...
- js 对象深复制,创建对象和继承
js 对象深复制,创建对象和继承.主要参考高级编程第三版,总结网上部分资料和自己的代码测试心得.每走一小步,就做一个小结. 1.对象/数组深复制 一般的=号传递的都是对象/数组的引用,如在控制台输入 ...
- [置顶] js对象
js中,一切事物都是对象.对象是一切的基础. 而具体到某一个对象时. 对象则是包含一组变量和函数的集合实例 我们先来中体会下je对象的全局. 接下来就具体揭开这个对象的面纱吧 ja对象分类 Funct ...
- js isArray小结
原文:[转载]js isArray小结 在日常开发中,我们经常需要判断某个对象是否是数组类型的,在js中检测对象类型的常见的方法有几种: 1.typeof操作符.对于Function.String.N ...
- Js继承小结
Js继承小结 一直以来,对Js的继承有所认识,但是认识不全面,没什么深刻印象.于是,经常性的浪费很多时间重新看博文学习继承,今天工作不是特别忙,有幸看到了http://www.slideshare.n ...
- [js]js设计模式小结
js设计模式小结 工厂模式/构造函数--减少重复 - 创建对象有new - 自动创建obj,this赋值 - 无return 原型链模式 - 进一步去重 类是函数数据类型,每个函数都有prototyp ...
- [js]设计模式小结&对原型的修改
js设计模式小结 工厂模式/构造函数--减少重复 - 创建对象有new - 自动创建obj,this赋值 - 无return 原型链模式 - 进一步去重 类是函数数据类型,每个函数都有prototyp ...
- JS组件系列——表格组件神器:bootstrap table 包含了js对象的定义和对象成员函数的定义
前言:之前一直在忙着各种什么效果,殊不知最基础的Bootstrap Table用法都没有涉及,罪过,罪过.今天补起来吧.上午博主由零开始自己从头到尾使用了一遍Bootstrap Table ,遇到不少 ...
- 7-81 js课程小结
7-81 js课程小结 学习要点 理解全局对象 变量的作用范围 理解全局对象Global 全局属性和函数可用于所有内建的 JavaScript 对象.全局对象是所有全局方法的拥有者,用来统一管理全局方 ...
随机推荐
- js判断小数点几位
js如何判断小数点后有几位 <script> var n=3.143423423;alert(n.toString().split(".")[1].length); & ...
- c++ 中static关键字
static可以用于修饰普通的变量和函数,也可以用于修饰类的成员 普通应用 1.修饰普通变量 修饰全局变量:将变量的作用域限制在所属文件 修饰局部变量:将变量的生存周期延迟到程序结束 2.修饰普通函数 ...
- javascript面向对象分层思维
js本身不是面向对象语言,在我们实际开发中其实很少用到面向对象思想,以前一直以为当要复用的时候才封装成对象,然而随着现在做的项目都后期测试阶段发现面向对象的作用不仅仅只是复用,可能你们会说面向对象还有 ...
- c++ _beginthread
c++多线程编程 #include <windows.h> #include <process.h> /* _beginthread, _endthread */ #inclu ...
- 在安卓3.0以下版本使用Fragment的注意事项
1. 按照网上的Fragment官网资料翻译来做一直有错: 10-03 02:43:13.971: E/AndroidRuntime(1921): java.lang.RuntimeException ...
- 关于js with语句的一些理解
关于js with语句的一些理解 今天看到js的with语句部分,书中写到,with语句接收的对象会添加到作用域链的前端并在代码执行完之后移除.看到这里,我有两点疑问,添加到作用域链前端是不是指对 ...
- 设置 Eclipse 智能代码提示,大幅度减少 alt+/ 使用频率,打每个字都出现代码提示的办法
以前网上有个英文版本的,现在自己汉化一下...O(∩_∩)O 哈哈 ~ http://www.cnblogs.com/lidabo/archive/2013/03/05/2944245.html ...
- Spring Mail
想必大家在今天这个特殊的日子里,一定热血沸腾了一把.为上午的阅兵点70个赞! 进入Spring Mail的主题: 前后大概花了8个小时的时间来研究Spring封装的javaMail.本来觉得挺简单的应 ...
- Leetcode#90 Subsets II
原题地址 跟Subsets(参见这篇文章)类似. 但因为有重复元素,所以要考虑去重问题. 什么情况下会出现重复呢?比如S = {5, 5, 5},如果要选1个5,一共有C(3,1)=3种选法,即100 ...
- 【bzoj1005】[HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4175 Solved: 1660[Submit][Stat ...