javascript 之对象-13
发布日期:2021-05-09 04:58:37 浏览次数:17 分类:博客文章

本文共 1720 字,大约阅读时间需要 5 分钟。

对象

无序属性的集合,属性可以包含基本值、对象或者函数,简单理解为对象是若干属性的集合;

我们常说的面向对象(oop)编程其实是指的一种编码的思想,简单理解为用对象来封装数据,利用封装、继承、多态对代码进行复用、重构、以及解耦等;

函数也是对象

每个函数都是Function 的实例/对象,所以函数名是一个指向函数对象的指针,这个对象跟其他对象一样具有属性,方法;

1  //函数声明 2     function sayName(){ 3  4     } 5     //函数表达式 6     var sayNmae=function(){ 7  8     } 9     //Function 构造函数10     var sayName=new Function()

Function 构造函数可以接收任意数量参数作为参数,但是最后一个参数始终是函数体,前面的参数则看成是函数的形参;

创建对象

1、字面量

//字面量    var p={name:'Joel',age:22}

2、构造函数

系统自带:new Object(), Array(), Number(),Boolean(), Date()

var p=new Object();    p.name='Joel';    p.age='22';

自定义:为了和普通函数区分,首字母大写,用来构造对象的我们称为构造函数

function Person(name){        this.name=name;        this.age=age;    }    var p=new Person('Joel',22);

New 操作符

MDN上是这样说的:

当代码 new Foo (...) 执行时:

  • 一个新对象被创建,它继承自 Foo .prototype。
  • 使用指定的参数调用构造函数 Foo,并将 this绑定到新创建的对象。 new Foo 等同于 new Foo (),只能用在 Foo 不传递任何参数的情况。
  • 如果构造函数返回了一个“对象”,那么这个对象会取代整个 new出来的结果。如果构造函数没有返回对象,那么 new出来的结果为步骤1创建的对象。(一般情况下构造函数不返回任何值,不过用户如果想覆盖这个返回值,可以自己选择返回一个普通对象来覆盖。当然,返回数组也会覆盖,因为数组也是对象。)

用代码来表示:

1 var o = new Object(); //创建对象2 o.[[prototype]] = Foo.prototype;//创建的对象内部指针[[prototype]] 指向Foo的原型对象3 Foo.call(o); //用创建的对象来绑定this 指针

所以,当我们执行new Person('Joel',22)时,javascript会:

var o = new Object();o.__proto__ = Person.prototype;A.call(o);

将创建的o对象返回给p;即完成var p=new Person('Joel',22);

对象——若干属性的集合

java或者C#中的对象都是new一个class,而且里面有字段、属性、方法,规定的非常严格。但是javascript就比较随意了,数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,只有属性,没有方法。那么这样方法如何表示呢?方法也是一种属性。因为它的属性表示为键值对的形式。而且,javascript中的对象可以任意的扩展属性,没有class的约束。

1  var p={ 2         name:'Joel', 3         age:22, 4         sayName:function(){ 5             console.log(this.name); 6         }, 7         run:function(){ 8             //TODO 9         }10     }11     p.a=20;12     console.log(p.a)
上一篇:javascript 之原型、原型链-14
下一篇:javascript 执行环境细节分析、原理-12

发表评论

最新留言

很好
[***.229.124.182]2025年04月16日 10时27分18秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

easyexcel 导出 代码翻译converter_【starter推荐】简单高效Excel 导出工具 2025-03-29
echarts 如何在一条柱形显示两个数字_干货 | 如何快速制作数据地图?让你的可视化逼格再高一级!... 2025-03-29
eclipse里source的快捷方法_Eclipse快捷键/快捷操作汇总 2025-03-29
elasticsearch 查询_Elasticsearch地理信息存储及查询之Geo_Point 2025-03-29
embedding层_【预估排序】Embedding+MLP: 深度学习预估排序通用框架(一) 2025-03-29
excel中最常用的30个函数_Excel玩转数据分析常用的43个函数! 2025-03-29
flink sql设置并行度_Flink 参数配置和常见参数调优 2025-03-29
go 字符串替换_Go 每日一库之 quicktemplate 2025-03-29
hex editor neo下载_口袋妖怪爆焰黑手机版下载-口袋妖怪爆焰黑手游下载v4.3.0 安卓版... 2025-03-29
hp工作站z8装Linux,惠普Z8G4双路最小工作站 2025-03-29
html上传图片直接保存到数据库中,Editor上传图片路径存入数据库中怎么弄? 2025-03-29
ICLOUD储存空间要升级吗_有人像我一样需要恢复苹果手机icloud空间ios备份时 微信卡住不动了吗(已解决)... 2025-03-29
jaccard相似度_自然语言处理之文本相似度计算 2025-03-29
java 字符编码过滤器_java web中字符编码的过滤器(Filter - 1) 2025-03-29
java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单! 2025-03-29
java开发区块链_用Java代码实现区块链 2025-03-29
java拼车平台(ssm框架毕业设计) 2025-03-29
Java指定区间返回随机数 2025-03-29
java操作List 2025-03-29
Java操作Sql语句 出现迭代死循环 (Bug排查) 2025-03-29