JavaScript高级编程阅读笔记
来源:互联网 发布:优美句子知乎 编辑:程序博客网 时间:2024/04/30 22:43
js比较特殊,没有类的概念,js中的对象定义为:"无序的属性的集合,其属性可以包含基本值,对象或者函数".js的对象可以直接理解为散列表.对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值.无非就是一组键值对,其中的值可以是数据或者是函数
每个对象都是基于一个引用类型来创建的,这个引用类型可以是js中的原生类型,也可以是开发人员自定义的类型.
可以这么定义一个对象
var per = { name:"勒布朗", age : 29, job : 'Software Engineer', sayName : function(){ console.debug(this.name); }, changeName : function(name){ this.name = name; } }; per.sayName();//输出 勒布朗
1.工厂模式创建对象
/** 工厂模式创建对象**///工厂模式demo1 使用创建对象 返回对象的方式function createPerson(nameStr) {var per = new Object();per.name = nameStr;per.sayName = function (){console.debug(this.name);};per.toString = function(){return this.name;}return per;} var p1 = createPerson('Tom');var p2 = createPerson('Jack');p1.sayName();p2.sayName(); var ps = [];ps.push(p1);ps.push(p2);alert(ps);console.debug(ps);//工厂模式生成对象 demo2 使用对象字面量的方式创建对象function createDog(nameStr){var dog = {name : nameStr,sayName : function (){console.debug(this.name);},toString : function(){return this.name;}};return dog;}var d1 = createDog('Tom');var d2 = createDog('Jack');d1.sayName();d2.sayName(); var ps = [];ps.push(d1);ps.push(d2);console.debug(ps);
2.使用构造函数模式创建对象
(1).创建一个对象
(2).将构造函数的作用域给新对象(因此this就指向了这个新对象)
(3).执行构造函数中的代码(为这个新对象添加属性)
(4).返回新对象
//构造器模式创建对象function Person(name, age, job) {//构造方法创建对象 //构造方法内部不需要显式的new对象this.name = name;this.age = age;this.job = job;this.sayName = function() {console.debug(this.name);console.debug(this.age);console.debug(this.job);}//构造方法内部不需要显式的返回对象} //使用构造方法时,需要new操作创建对象 var per = new Person('Lebron',27,'SoftWareEngineer'); per.sayName();
每一个被创建的对象,都包含有构造函数这个属性,比如上面创建的per对象,包含有构造函数Person(),见下图
如果创建两个Person类型的对象,发现他们的构造器属性都是指向的函数Person()
var per1 = new Person('Lebron',27,'SoftWareEngineer'); console.debug(per1); var per2 = new Person('kobe',27,'SoftWareEngineer'); console.debug(per2); console.debug(per1.constructor == Person);//true console.debug(Person == per2.constructor);//true
对象的构造器属性最初是用来标识对象类型的,而检测对象类型最好还是使用instanceof操作符更靠谱一些,比如per1对象是Person的实例,也是Object的实例.
创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型.
2.1将构造函数当作函数
构造函数也是函数,只不过调用的方式不同而已.下面的代码展示了几种不同的调用方式
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ console.debug('hi~~ ' + this.name); }; } //使用构造函数的方式 var person = new Person("Nicholas", 29, "Software Engineer"); person.sayName(); //"Nicholas" //使用普通函数的方式,这个函数被添加为window对象的一个属性 Person("Greg", 27, "Doctor"); //adds to window window.sayName(); //"Greg" window.name = 'lebron'; window.sayName();//lebron //将函数绑定在一个对象上,并且设定了其作用域为这个绑定的对象 var obj = new Object(); Person.call(obj, "Kristen", 25, "Nurse"); obj.sayName(); //"Kristen" obj.name = 'kobe'; obj.sayName();//kobe
0 0
- JavaScript高级编程阅读笔记
- 阅读笔记《JavaScript高级程序设计》
- javascript高级程序设计阅读笔记
- 【JavaScript 高级程序设计阅读笔记】JSON
- JavaScript高级程序设计阅读笔记-1
- JavaScript高级编程笔记(1)
- JavaScript高级编程(学习笔记)
- C#高级编程阅读笔记-1
- 阅读“JavaScript高级程序设计”
- javascript dom编程艺术阅读笔记
- JavaScript Dom编程艺术 阅读笔记
- 《JavaScript高级程序设计3》阅读笔记,随时更新
- 《javascript高级程序设计(第3版)》阅读笔记
- JavaScript高级程序设计:第9.10章阅读笔记
- javascript内核高级编程_学习笔记
- Unix环境高级编程阅读笔记(1)
- 20151117《Unix环境高级编程》阅读笔记:前言
- unix环境高级编程(阅读笔记)----线程同步
- 客户端以post方式调用Wcf
- 深入理解maven及应用(一):生命周期和插件
- apk插件化摸索…
- Linux中软件包常见格式的安装与卸载
- CentOS 搭建 Mysql MMM 高可用架构
- JavaScript高级编程阅读笔记
- 单台物理机搭建Sequoiadb集群
- python实现 从一个数组中找到完全含有另一个数组元素的最短子数组
- 并行输入\输出控制器之我见(PIO)
- 基于中值滤波或双边滤波方式的图像去雾效果的研讨。
- "网络适配器本地连接没有有效ip地址配置"错误的解决办法
- QT下 TableWidget 实现右键菜单栏,以及TableWidget整体美化工作。
- [码海拾贝 之JS] JS 之数组排序
- 医疗行业大数据应用体现在10个角度