JS学习-创建对象
1、标准创建对象模式
- var person = new Object();
- person.name = "Nicholas";
- person.age = 29;
- person.job = "Software Engineer";
- person.sayName = function(){alert(this.name);};
2、字面量模式
- var person = {
- name: "Nicholas",
- age: 29,
- job: "Software Engineer",
- sayName: function(){alert(this.name);}
- };
3、工厂模式
- function createPerson(name, age, job){
- var o = new Object();
- o.name = name;
- o.age = age;
- o.job = job;
- o.sayName = function(){alert(this.name);};
- return o;
- }
- var person1 = createPerson("Nicholas", 29, "Software Engineer");
- var person2 = createPerson("Greg", 27, "Doctor");
4、构造函数模式
- function Person(name, age, job){
- this.name = name;
- this.age = age;
- this.job = job;
- this.sayName = function(){alert(this.name);};
- }
- var person1 = new Person("Nicholas", 29, "Software Engineer");
- var person2 = new Person("Greg", 27, "Doctor");
5、原型模式
- function Person(){}
- Person.prototype.name = "Nicholas";
- Person.prototype.age = 29;
- Person.prototype.job = "Software Engineer";
- Person.prototype.sayName = function(){alert(this.name);};
- var person1 = new Person();
- person1.sayName(); //"Nicholas"
- var person2 = new Person();
- person2.sayName(); //"Nicholas"
- alert(person1.sayName == person2.sayName); //true
6、组合构造函数和原型模式
- function Person(name, age, job){
- this.name = name;
- this.age = age;
- this.job = job;
- this.friends = ["Shelby", "Court"];
- }
- Person.prototype = {
- constructor : Person,
- sayName : function(){alert(this.name);}
- }
- var person1 = new Person("Nicholas", 29, "Software Engineer");
- var person2 = new Person("Greg", 27, "Doctor");
- person1.friends.push("Van");
- alert(person1.friends); //"Shelby,Count,Van"
- alert(person2.friends); //"Shelby,Count"
- alert(person1.friends === person2.friends); //false
- alert(person1.sayName === person2.sayName); //true
7、动态原型模式(这里只在 sayName()方法不存在的情况下,才会将它添加到原型中。)
- function Person(name, age, job){
- this.name = name;
- this.age = age;
- this.job = job;
- if (typeof this.sayName != "function"){
- Person.prototype.sayName = function(){alert(this.name);};
- }
- }
- var friend = new Person("Nicholas", 29, "Software Engineer");
- friend.sayName();
8、寄生构造函数模式(除了使用 new 操作符并把使用的包装函数叫做构造函数之外,这个模式跟工厂模式其实是一模一样的。)
- function Person(name, age, job){
- var o = new Object();
- o.name = name;
- o.age = age;
- o.job = job;
- o.sayName = function(){alert(this.name);};
- return o;
- }
- var friend = new Person("Nicholas", 29, "Software Engineer");
- friend.sayName(); //"Nicholas"
9、稳妥构造函数模式(一是新创建对象的实例方法不引用 this;二是不使用 new 操作符调用构造函数)
- function Person(name, age, job){
- var o = new Object();
- o.sayName = function(){alert(name);};
- return o;
- }
- var friend = Person("Nicholas", 29, "Software Engineer");
- friend.sayName(); //"Nicholas"
JS学习-创建对象的更多相关文章
- JS学习笔记-OO疑问之对象创建
问一.引入工厂,解决反复代码 前面已经提到,JS中创建对象的方法,不难发现,主要的创建方法中,创建一个对象还算简单,假设创建多个类似的对象的话就会产生大量反复的代码. 解决:工厂模式方法(加入一个专门 ...
- JS学习笔记-OO创建怀疑的对象
问了.工厂介绍,解决重码 前面已经提到,JS中创建对象的方法.不难发现,主要的创建方法中,创建一个对象还算简单,假设创建多个类似的对象的话就会产生大量反复的代码. 解决:工厂模式方法(加入一个专门创建 ...
- anjular中Service、Factory、Provider的使用与js中创建对象的总结
在学习anjular中Service的使用时,发现和js中的创建对象的方式有一定的联系,所以总结了anjular中Service.Factory.Provider的使用方式与js创建对象的方式 一.先 ...
- JS学习:JavaScript的核心
分享到 分类 JS学习 发布 ourjs 2013-12-02 注意 转载须保留原文链接,译文链接,作者译者等信息. 作者: JeremyWei 原文: JavaScript The ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- js学习之变量、作用域和内存问题
js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...
- 【Knockout.js 学习体验之旅】(3)模板绑定
本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
- 【Knockout.js 学习体验之旅】(2)花式捆绑
本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
随机推荐
- [LeetCode] Integer Break 整数拆分
Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...
- [LeetCode] N-Queens N皇后问题
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- 《Markdown 一些基本语法》
Markdown编辑器是在上学期学习Java时写博客用来编辑文字内容以及形式的,但其实当时掌握Markdown的语法却是极少的,也仅仅是会使用几级标题这样简单的语法,就和当时学习git上传代码一样,也 ...
- 【前端积累】SEO 学习
白帽SEO:网站标题 关键字 描述 网站内容优化 Robot.txt文件 网站地图 增加外链引用 网站结构布局优化:扁平化结构 控制首页链接数量:中小网站100以内,页面导航.底部 ...
- bzoj2243
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6753 Solved: 2496[Submit][Status ...
- ThreadPoolTimer -延迟执行, 周期执行
介绍重新想象 Windows 8 Store Apps 之 线程池 通过 ThreadPoolTimer 实现延迟执行 通过 ThreadPoolTimer 实现周期执行 通过 ThreadPool ...
- Django初识
web框架 Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口.标准样板以及会话管理等,可提升代码的可再用性.简单地说,就是你用别人搭建好的舞台来做表演,用别人做好 ...
- SVO原理解析
最近空闲时间在研究Semi-Direct Monocular Visual Odometry(SVO)[1,2],觉得它值得写一写.另外,SVO的运算量相对较小,我想在手机上尝试实现它. 关于SVO的 ...
- wpf ListBox删除
绑定一个GUID对象 重绑定的数组中移除改对象,重新绑定.
- linux安装apache
我的linux是用阿里云上的,版本是CentOS 6.5 apache依赖于apr.apr-util和pcre,所以需要先安装这三个 apr(包含apr.apr-util和apr-iconv)是apa ...