4.7 自定义对象

JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象。

4.7.1 构造器创建对象(原生JS对象)

构造器,就是一个普通的函数,函数中可以定义0到N个参数,具体的代码如下:

/*对象构造器,就是一个普通函数*/
    function Student(stuName,age,password,gender){
       /*定义对象的属性*/
        this.stuName = stuName;
        this.age = age;
        this.password = password;
        this.gender = gender;

/*定义对象的方法*/
        this.study = function(){
            console.log(this.stuName + "写的方法!")
        }
    }

4.7.1.1 创建对象

//使用该对象
// var stu = new Student("胡帅",18,'123456',1);
    var stu = new Student();
    stu.stuName = "胡帅";
    stu.age = 18;
    stu.gender = 1;
    stu.password = "123456";

4.7.1.2 动态添加属性和行为

//如果需要给胡帅这个对象,动态的添加属性
    Student.prototype.address = null;
    stu.address = "九眼桥1号桥洞!";

//如果需要给胡帅这个对象,动态的添加行为
    Student.prototype.playGame = function(game){
        console.log(this.stuName + "玩[" + game +"]游戏!")
    }

4.7.1.3 使用对象

console.log(stu)
stu.study();//调用胡帅学习的行为
stu.playGame("老鹰捉小鸡");

//调用某一个属性
console.log(stu.stuName)

4.7.2 对象初始化器方式(生成JS对象)

/*使用对象初始化器创建一个新的对象*/
var stu = {
    /*定义对象的属性*/
    stuName: "胡帅",
    age: 18,
    gender: 1,
    password: "123456",
    /*定义对象的行为*/
    study: function () {
        console.log(this.stuName + "正在打游戏!");
    }
};
//使用学生对象
console.log(stu.stuName);

//定义一个JS对象,对象属性中可以包含其他对象,如下面的妻子,可以包含数组,如他儿子们对象的数组
var person = {
    userName: "胡帅",
    wife: {userName: "赵铁锤", age: 28},
    sons: [{userName: "狗蛋儿"}, {userName: "二狗蛋"}, {userName: "小狗蛋"}],
    kiss: function () {
        console.log(this.userName + "给他妻子" + this.wife.userName + "说:妹妹,来波尔一个!!!")
    },
    gun: function () {
        console.log(this.userName + "给他的儿子说:儿子,去玩泥巴!!!")
    }
};

/*属性调用*/
person.userName;
person.wife.name;

person.sons[0].userName;

/*行为调用*/
person.gun();
person.kiss();

4.7.2.1 JS对象的格式

1、所有的数据都是以KV键值对结构方式存在
2、KV键值对需要使用冒号分割,每个成对的KV键值对需要使用逗号进行分割
3、花括号来描述一个完整的JS对象
4、中括号来描述一个完成的数组对象

4.7.2.2 JS对象使用

JS对象的使用,很简单,语法如下:
Object.属性名|方法名();

以上的这些写法只是将原生的js对象利用更加简单的方式进行书写,且更加容易阅读,不作为数据传送,只是一种写法

4.7.3 JSON简单介绍

JSON在JS中,也是一种对象的描述方式,它的作用跟XML描述对象的一样。只不过XML描述对象更加复杂,解析起来更加困难,所以我们一般推荐大家使用JSON来描述一个对象,它是一种轻量级的文本数据转换格式。

它跟XML都是常见的数据描述手段,但是它们区别在于:

1、它不需要像XML那样去定义一系列的标签,也不需要提供对应的标签解析程序
2、它的内容更短更小,传输时花费的网络代价就非常的小,传输速度也就更加的快

4.7.4 JSON作为数据传输

JSON作为数据传输格式的时候我们要注意了,JSON格式的的数据是键值对的形式,同时不能含有方法函数,同时键必须用双引号包含起来,值可以是数值(10进制) ,字符串(双引号),布尔值和null,也可以是数组,符合JSON的对象,不能是函数,NaN,Infinity,-Infinity和undefined,因为传输数据主要就是靠这类明确用来保存数据值的属性,属性之间用逗号“,”隔开,同时属性最后不能有逗号。以下这种格式的写法称为json对象,但它也是js对象,json对象只是js对象的一种写法而已。

如:

  1. var data = {
  2. "name":"张三",
  3. "age":18,
  4. "brother":{
  5. "name":"张二",
  6. "age":18},
  7. "sister"::[{
  8. "name":"张萌",
  9. "age":18},{
  10. "name":"张倩",
  11. "age":18}]
  12. }

这种JSON格式的对象(JSON对象)就是用来做为json格式数据传输的,如果作为消息形式传送至服务器的话就可已使用普通JS对象,不要包含方法。如:

  1. var person = {
  2. userName: "胡帅",
  3. age:30,
  4. wife: {userName: "赵铁锤", age: 28},
  5. sons: [{userName: "狗蛋儿"}, {userName: "二狗蛋"}, {userName: "小狗蛋"}]
  6. };
区别 JSON Javascript对象
含义 仅仅是一种数据格式 表示类的实例,一种javascript的引用类型
传输 可以跨平台数据传输,速度快,作为json格式传输:application/json,以json字符串的形式,利用ajax 可作为消息的形式发送给服务器:multipart/form-data,利用ajax,传输对象
表现

1.简直对方式,键必须加双引号

     <p>2.值只能是数值(10进制) ,字符串(双引号),布尔值和null,也可以是数组,符合JSON的对象不能是方法函数,NaN,Infinity,-Infinity和undefined</p><p>3.最后一个值后面不能有逗号</p></td><td><p>1.键值对方式,键可允许加单引号,双引号,也可以不加</p><p>2.值可以是函数、对象、字符串、数字、boolean 等javascript 中的任意值</p><p>3.可以有逗号</p></td></tr><tr><td>相互转换</td><td><p>Json字符串转换Js对象</p><p>1.JSON.parse(JsonStr);(不兼容IE7)</p><p>2.eval("("+jsonStr+")");(兼容所有浏览器,但不安全,会执行json里面的表达式?)</p></td><td><p>js对象转换Json字符串</p><p>JSON.stringify(jsObj);</p></td></tr></tbody></table></div><p><strong><span style="color:#f33b45;">注:json仅仅是一种格式,json对象其实是按照既定规则书写的js对象,json对象就是js对象</span></strong></p>

JSON对象调用

同JS对象的调用方式相同,语法如下:

jsonObject.属性名

  1. //如调用上面的json对象
  2. console.log(data.name);//打印 张三

JSON格式的字符串与JSON对象

JSON格式的字符串:

(简单说就是在json对象外面包裹了单引号,变成字符串(属性必须用双引号包裹);就是说,在浏览器控制台利用console.log( )打印该字符串,显示为下面这种格式(json对象书写的代码的样式):

{"docName":"张","age":18,"page":1,"rows":5}  

例子:

  1. var txt = '{ "employees" : [' +
  2. '{ "firstName":"Bill" , "lastName":"Gates" },' +
  3. '{ "firstName":"George" , "lastName":"Bush" },' +
  4. '{ "firstName":"Thomas" , "lastName":"Carter" } ]}';

JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

var obj = eval ("(" + txt + ")");

转成对象之后,就可以利用对象的调用方式进行取值了。因为后台可能传输上来的是json格式的字符串,所以需要用这种方式进行解析。

注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json字符串中的表达式。

1. jQuery插件支持的转换方式

$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成js对象 ,必须是json格式的字符串

2.jquery.json.js插件支持的转换方式

$.toJSON(jsonobj);//可以将js对象转换成json字符串

3. 浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器:

JSON.parse(jsonstr); //可以将json字符串转换成js对象 ,必须是json格式的字符串
JSON.stringify(jsonobj); //可以将js对象转换成json字符串

JSON.stringify 函数

作用:把对象转成JSON字符串,因此会忽略 属性值不符合JSON 的字段

  1. var test = {
  2. one : 'Good',
  3. 'two' : 'Man',
  4. 'three' : undefined,
  5. 'four' : [ 1, 2 ],
  6. 'five' : function() {
  7. return 'test'
  8. }
  9. }
  10. JSON.stringify(test); //'{"one":"Good","two":"Man","four":[1,2]}'

js中自定义对象、json对象、json字符串、普通js对象 --js学习那本书上的相关推荐

  1. js中自定义对象、json对象、json字符串、普通js对象

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  2. Js中自定义对象四种方式

    Js中自定义对象四种方式 1 类似JAVA有参构造方式: 1.定义对象: function 对象(属性[age]){追加属性:如(this.age = age)[this代表当前对象的地址值的引用]追 ...

  3. JS中简单实现 xml转json 导入即可使用

    JS中超级简单xml转json   导入即可使用 在网上找了一大队xml转换json 都是又长有不可用,乱七八糟  最后只能自己些了 简单方便,传入即可使用 function xmljson(xml) ...

  4. js中console在一行内打印字符串和对象

    在前端开发中,大多数的调试一般都是F12中的console和network中查看请求数据和响应数据,也有一部分人喜欢用debugger. 在开发大一些的项目时,在开发环境下,打开着控制台,切换一下页面 ...

  5. js中的Blod、File、FileList、FileReader对象

    前端在下载文件的时候经常会使用到Blob.File.FileReader对象,那么它们到底是干嘛的,怎么使? 一.我们可以通过Blob对象直接来操作二进制文件.后端返给我们文件的内容我们就可以用Blo ...

  6. Three.js中自定义控制几何体的点和面的属性

    场景 Three.js中引入dat.gui库实现界面组件控制动画速度变量: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1193 ...

  7. python进制转换字符串转二进制对象整数转二进制对象16进制字符串转二进制对象(及其逆转换)

    (1)数字进制转换 int() 函数用于将一个字符串或数字转换为整型. x – 字符串或数字. base – 进制数,默认十进制. 如果是带参数base的话,要以字符串的形式进行输入 >> ...

  8. js中执行到一个if就停止的代码_Node.JS实战64:ES6新特性:Let和Const。

    以往版本的JS中,如果你在if中定义一个变量,这个变量在if外部也是可以访问的,而不管if条件是否被执行,如: if(false){ var x = "hello JShaman" ...

  9. Js读取Cookie中指定字段的值,Js中读取某个Cookie,Js中根据Cookie的key得到对应的value,Js正则表达式匹配指定的Cookie

    Js中想要读取Cookie中指定字段的值,可以遍历Cookie根据指定Key提取Cookie,或者使用正则表达式匹配Cookie,代码如下: /*** @description: 遍历cookie得到 ...

最新文章

  1. 传美的投40亿进军卫浴行业
  2. 【错误记录】Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )
  3. 设计模式之facade模式
  4. 《高质量c++/c编程指南》学习摘要
  5. atxserver运行没有反应_硫酸盐对厌氧系统的影响及运行注意事项!
  6. 今天tiktok小社群更新 第5个项目行业案例
  7. 计算机知识选择题库,计算机基础知识篇选择题库
  8. 高德地图与百度地图的经纬度偏差纠正
  9. 航天金税开票导入导出txt格式
  10. pycharm搜索不到安装包
  11. android 呼吸灯权限_自定义 呼吸灯 闪烁 效果 自定义View
  12. 37手游基于云平台的大数据建设实践
  13. excel数据分类与自动填充
  14. P9:最大池化的使用
  15. 基于auto.js微信点赞
  16. 虹软Linux离线激活,虹软linux错误
  17. matlab中chrom的意思,怎样解决遗传算法中Chrom和FitnV的维数不一致问题
  18. 堡垒机是干什么的?堡垒机的主要功能是什么?堡垒机的目标价值有哪些?
  19. 本月第三次,亚马逊AWS再次遭遇宕机
  20. less动态生成--antd换肤功能

热门文章

  1. php百度网盘解析源码,【教程】php实现百度网盘视频解析
  2. 如果mysql磁盘满了,会发生什么?还真被我遇到了!
  3. VS简易示波器(二):自制子属性窗
  4. 有哪些求职面试小技巧?
  5. 和阿里老哥聊完 DDD,被彻底惊艳了!
  6. ros:如何获得地图坐标系中的某一点的像素坐标
  7. 2022年区块链影响最大的四个行业
  8. 爬虫python编程与cvi编程_无编程经验学习Python做爬虫,目前遇到困难,请各位指点下?...
  9. 教学转用计算机,中国计算机教学网转:3DSMAX2.0使用技巧两则
  10. 【NodeJs-5天学习】第三天实战篇④ ——QQ机器人,实现自动回复、重要提醒