JavaScript红宝书笔记:创建对象
2016-08-24 16:40
441 查看
JavaScript包含三部分:ECMAScript、DOM、BOM
ECMAScript提供了核心语言功能,面向对象,但是没有类的概念。本篇文章要总结一下创建对象的几种方式。如果面试官问你如果创建对象,你可以把它们都说一遍= = 。为了不那么累,还是说最好的方法吧。
方法在原型中定义
ECMAScript提供了核心语言功能,面向对象,但是没有类的概念。本篇文章要总结一下创建对象的几种方式。如果面试官问你如果创建对象,你可以把它们都说一遍= = 。为了不那么累,还是说最好的方法吧。
1.创建Object的实例(最简单)
//使用new操作符,也就是Object构造函数的方法。 var person = new Object(); person.name ="panda"; person.sayName = function(){ alert(this.name); };
//对象字面量的方法1 var person = { name:"panda", sayName:function(){ alert(this.name); } }
//对象字面量的方法2 var person = {}; person.name ="panda"; person.sayName = function(){ alert(this.name); };
2. 工厂模式(不能识别对象类型)
工厂模式就是把1中的方法封装起来。function createPerson(name){ var person = new Object(); person.name = "panda"; person.sayName=function(){ alert(this.name); }; return person; } var person1 = createPerson("panda");
3. 构造函数模式
受new Object的启发,也可以new一个自定义的构造函数Person//缺点:每个方法都要在每个实例上重新创建一遍 function Person(name){ this.name = name; this.sayName = function(){ alert(this.name); }; } var person1 = new Person("panda1"); var person2 = new Person("panda2");
//缺点:封装性不好 function Person(name){ this.name = name; this.sayName = sayName; } function sayName(){ alert(this.name); }; var person1 = new Person("panda");
4. 寄生构造函数模式(不能确定对象类型)
和工厂模式比较相像。function createPerson(name){ var person = new Object(); person.name = "panda"; person.sayName=function(){ alert(this.name); }; return person; } var person1 = new Person("panda");//注意看这里
5. 稳妥构造函数模式(安全)
和工厂模式比较相像。function createPerson(name){ var person = new Object(); person.name = "panda"; person.sayName=function(){ alert(this.name); }; return person; } var person1 = Person("panda");//注意看这里
6. 原型模式(不适合引用类型的属性值)
原型模式构造出来的对象,对象拥有的属性和方法由所有实例共享。function Person(){ } Person.prototype.name = "panda"; Person.prototype.sayName = function(){ alert(this.name); }; var person1 = new Person(); person1.sayName(); var person2 = new Person(); person2.sayName();
//重写原型对象,这种写法的construction属性变成了Object function Person(){ } Person.prototype= { name:"panda", sayName:function(){ alert(this.name); } };
7.构造函数和原型混合模式(最常用)
属性在构造函数中定义方法在原型中定义
function Person(name){ this.name = name; } Person.prototype = { constructor:Person, sayName:function(){ alert(this.name); } } var person1 = new Person("panda");
8.动态原型模式(可以确定对象类型)
function Person(name){ this.name = name; //方法 if(typeof this.sayName!="function"){ Person.prototype.sayName=function(){ alert(this.name); }; } } var person1 = new Person("panda");
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 设计模式---状态模式在web前端中的应用
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法