
javascript 之对象-13
发布日期:2021-05-09 04:58:37
浏览次数:7
分类:博客文章
本文共 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)
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月13日 02时36分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Redis性能篇(二)CPU核和NUMA架构的影响
2019-03-06
MMORPG大型游戏设计与开发(客户端架构 part3 of vegine)
2019-03-06
C基础 带你手写 redis ae 事件驱动模型
2019-03-06
深度优先搜索和广度优先搜索
2019-03-06
我是个怎样的人
2019-03-06
C基础 工程中常用的排序
2019-03-06
6.Android-五大布局
2019-03-06
第3阶段——内核启动分析之start_kernel初始化函数(5)
2019-03-06
12.Linux之输入子系统分析(详解)
2019-03-06
19.QT-事件发送函数sendEvent()、postEvent()
2019-03-06
MyBatis 面试题
2019-03-06
源码解析之 Mybatis 对 Integer 参数做了什么手脚?
2019-03-06
oracle使用DBMS_RANDOM包生成随机数据
2019-03-06
[转]收集Oracle UNDO诊断信息脚本
2019-03-06
.NET Core 2.0 Preview 1发布下载和文档
2019-03-06
Qt快速入门之三:Qt项目建立、编译、运行和源码详解
2019-03-06
Qt 布局之三:栅格布局的使用详解
2019-03-06
【QML 快速入门】属性(Properties)
2019-03-06
音视频基础知识---像素格式YUV(转)
2019-03-06