- 浏览: 1312393 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (732)
- Java_about (146)
- Spring_Hibernate_Struts_OpenSource (27)
- linux_unix (62)
- life_sth (22)
- js_css_html_xml_nodejs (69)
- design_pattens (1)
- Perl (8)
- php_ecshop (4)
- DB_Mysql_Oracle_Informix_SqlServer (43)
- JSTL (8)
- Testing_自动化测试 (42)
- DB_ID_UUID (4)
- SEM_SEO (1)
- english_study_improvement (4)
- SVN_Git (9)
- WebService_SOA_CloudComputing (3)
- E-Commerce (1)
- Lucene_Solr (7)
- others (2)
- Regex (2)
- tomcat_jetty (8)
- zeroc-ice (1)
- java_excel (5)
- ant_maven_gradle (5)
- Unity_VR_AR_C# (2)
- jmeter (1)
- XPath_dom4j (1)
- Ruby_and_Rails (68)
- write_a_rails (17)
- manage_and_team (1)
- getting_real (1)
- ubuntu (20)
- git_and_git_flow (7)
- TODO (1)
- PM_design (2)
- Python_and_Django (8)
- NoSql_mongo_redis (24)
- C/C++ (3)
- vi_vim_gvim (0)
- c#_.Net_windows编程_dll (10)
- Php_and_Yii (9)
- Android_IOS (31)
- Mysql (5)
- sa_运维_network_硬件 (37)
- lua (2)
- c_cpp_VisualStudio (21)
- 硬件-RM-Arduino (6)
最新评论
-
shenkun58:
...
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
liaojia1:
正解,感谢
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
flingfox63:
谢谢分享,电脑上有IPV6,导致了Guard启动不了……
ruby错误解决: Address family not supported by protocol - connect(2) -
c39274936:
s = "hello_world_ruby" ...
驼峰格式和下划线格式转换_translation between camel and snake format -
yfj300:
学习了学习了学习了学习了
硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
javascript中的类和对象创建方式
一、构造函数+原型方式
创建一个对象,构造函数是最直接的方式了,不论对编译型的java还是解释型的ruby,都用new来创建对象。javascript也可以用new来创建。
例子:
function Car(sColor, iDoors, iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.showColor = function () { alert(this.color); }; } var oCar1 = new Car("red", 4, 23) var oCar2 = new Car("blue", 3, 25) oCar1.showColor(); oCar2.showColor();
因为javascript中的函数也是一个对象,这种方式就导致了一个问题:每new一个对象,就重复创建一个一模一样的“方法对象”。
因为方法也是一个对象(方法对象),那么可否在构造函数里再增加一个参数呢?可以,如下。这种方式有点儿ruby的味道了(传递一个方法),但是这不符合习惯(方法在类内建立),也不符合科学(建立很多方法总不能这么传递进去吧)。接着往下看。
showColor = function () { alert(this.color); }; function Car(sColor, iDoors, iMpg, fnShowColor) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.showColor = fnShowColor } var oCar1 = new Car("red", 4, 23, showColor) var oCar2 = new Car("blue", 3, 25, showColor) oCar1.showColor() oCar2.showColor()
进一步的解决方式是,利用javascript的prototype属性,可以让所有new的对象“继承”同一个方法。
这种方式遗留的一个缺点是不好看:一个函数定义在了类之外。
//用构造方法设置属性,用原型方法设置函数(因为函数是共享的) function Car(sColor, iDoors, iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike", "Sue"); } Car.prototype.showColor = function () { alert(this.color); }; var oCar1 = new Car("red", 4, 23); var oCar2 = new Car("blue", 3, 25); oCar1.drivers.push("Matt"); alert(oCar1.drivers); //outputs "Mike,Sue,Matt" alert(oCar2.drivers); //outputs "Mike,Sue"
二、动态的原型方式
function Car(sColor, iDoors, iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike", "Sue"); if (typeof Car._initialized == "undefined") {//这个大括号里定义原型方法 Car.prototype.showColor = function () { alert(this.color); }; Car._initialized = true; } }
似乎这种方式最完美,不过也引入了额外的判断代码。
注意:Car是构造方法,javascript中方法是对象,对象可以有属性,而且可以动态添加。这个_initialized属性就是这么来的。
三、工厂方式(很少使用)
工厂方式就是在工厂内new一个Object,之后把工厂方法的参数赋给这个对象。
function createCar(sColor, iDoors, iMpg) { var oTempCar = new Object; oTempCar.color = sColor; oTempCar.doors = iDoors; oTempCar.mpg = iMpg; oTempCar.showColor = function () { alert(this.color) }; return oTempCar; } var oCar1 = createCar(“red”, 4, 23); var oCar1 = createCar(“blue”, 3, 25); oCar1.showColor(); //outputs “red” oCar2.showColor(); //outputs “blue”
这种方式也有重复建立方法的问题。一个改进如下,但更让代码难看。
function showColor() { alert(this.color); } function createCar(sColor, iDoors, iMpg) { var oTempCar = new Object; oTempCar.color = sColor; oTempCar.doors = iDoors; oTempCar.mpg = iMpg; oTempCar.showColor = showColor; return oTempCar; } var oCar1 = createCar(“red”, 4, 23); var oCar2 = createCar(“blue”, 3, 25); oCar1.showColor(); //outputs “red” oCar2.showColor(); //outputs “blue”
综合来看,这种方式适合做框架用,但不如前两种易于理解和使用(没关)。
+——
+——
+——
)顺便说一句,javaeye或iteye这个编辑器真难用,老出现下面的乱码。真是受不了了。
- <SPAN style= "COLOR: #000000" > if ( typeof Car._initialized == "undefined" ) { //这个大括号里定义原型方法</SPAN>
- Car.prototype.showColor = function () {
- alert( this .color);
- };
- <SPAN style= "COLOR: #0000ff" > <SPAN style= "COLOR: #000000" >Car._initialized = true ;</SPAN>
-
</SPAN>
+——
+——
+——
发表评论
-
浏览器辅助神器:油猴脚本使用教程
2023-08-06 16:54 347= 最近一个功能,使用其他脚本总是运行出问题。 不得已使 ... -
js控制鼠标滚轮的方法_javascript控制鼠标滚轮的方法_jquery控制鼠标滚轮的方法
2022-06-10 17:20 417= js没有模拟click这样的scroll函数。仅仅通 ... -
jquery判断元素是否隐藏是否可见的多种方法
2022-04-05 19:24 500= = = jquery判断元素是否隐藏的多种方法 ... -
js JavaScript 读取文件数据、导出文本到文件。console输出到本地文件
2021-03-11 19:41 1509= 需求:输出点内容到本地文件。 方法:下面。 大概 ... -
万能代码,一招破解网页禁止复制
2020-10-19 20:11 740= 使用评测: 发现使用之后,页面的正常的js不好用了 ... -
jQuery 选择同时包含两个class的元素的实现方法
2020-10-18 23:03 491= = = from:https://www.cnb ... -
5个JS模板引擎
2020-06-28 11:38 370= 实际来看: 1百度的好用,但比较老。 1腾讯的用 ... -
获取weixin文章列表的js
2019-05-09 18:55 467= 没来得及优化,将就用着。 暂存备用。 = // ... -
如何在console控制台导入jquery
2019-04-23 21:05 1114= = = /* 百度共用jquery包 htt ... -
Jquey_Selenium对不显示节点的处理不同_比如getText结果不同
2018-08-25 10:38 632= = = Jquery中,不显示节点(displa ... -
[知乎问题]如何衡量一个人的angularjs水平?
2017-07-20 15:22 874= = = [知乎问题]如何衡量一个人的angular ... -
HTTP头的Expires与Cache-control区别
2016-12-23 18:53 1114HTTP头的Expires与Cache-control区别 ... -
200 OK (from cache) 与 304 Not Modified
2016-12-13 18:12 997200 OK (from cache) 与 304 N ... -
gulp_如何保证任务和程序顺序执行?
2016-05-11 20:17 2013使用return来解决,是最好的方式。 return有很 ... -
nodejs之supervisor__supervisor的python版本
2016-05-07 10:07 1708【nodejs之supervisor】 如 ... -
nodejs_cnpm导致node的prefix和cache和node_global配置环境变量不起作用
2016-05-06 11:41 4817cnpm的介绍: http://npm.taoba ... -
Foundation和zepto
2016-04-29 15:07 826为什么我们放弃了 Z ... -
npm link 命令解析
2016-04-29 13:44 1540npm link 命令解析 fr ... -
nodejs npm常用命令
2016-04-28 15:05 677nodejs npm常用命令 np ... -
nodejs中的环境变量:NODE_PATH
2016-04-28 15:05 1760注:没有解决gulp本地文件依赖的问题。 == ...
相关推荐
### JavaScript面向对象创建对象的方式小结 #### 一、引言 在JavaScript中,面向对象编程(OOP)是一种非常重要的编程范式。它通过创建和操作对象来组织代码,提高代码的复用性和可维护性。本文将详细介绍...
面向对象编程(Object-Oriented Programming,OOP)是JavaScript中的一个重要概念,它允许我们通过对象和类来组织和管理代码,提高代码的可重用性和可维护性。这篇博客“JavaScript 面向对象编程小结”可能涵盖了...
JavaScript是一种面向对象的编程语言,它的核心特性包括封装、聚集、继承和多态。封装允许我们将数据和相关的方法组织在一起,形成对象。聚集则是将一个对象包含在另一个对象内部,以此构建复杂的数据结构。继承使得...
JavaScript中的对象是编程的核心概念,它们允许我们组织和存储数据,并通过方法进行操作。下面是对JavaScript对象相关操作的总结。 1. **BOM (Browser Object Model)** 浏览器对象模型是JavaScript与浏览器交互的...
JavaScript中的TextRange对象是一个用于操作HTML文档中文本流的重要接口,它允许开发者对页面中的文本执行一系列操作,如选择、搜索和修改。TextRange对象属于动态HTML(DHTML)的一部分,能够帮助开发者实现更加...
类可以理解为创建对象的模板,而对象则是类的具体实例。JavaScript是一种基于原型的面向对象语言,其类和对象的定义方式与传统面向对象的语言(如Java或C++)有所不同。 JavaScript中定义类或函数,主要有以下几种...
在JavaScript中,工厂方法是一种创建对象的模式,通过函数来创建具有特定属性和方法的对象实例。例如: ```javascript function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = ...
创建对象的方式多种多样,每种方式都有其特点和应用场景。本文将结合实例形式总结分析JavaScript中常见的七种创建对象的方式。 1. 通过内置Object对象的方式创建 这种方式通过调用Object构造函数创建新对象,然后...
这篇小结将深入探讨JavaScript的基础知识,包括语法、数据类型、控制结构、函数、对象以及它在实际开发中的应用。 一、基础语法 JavaScript的语法与C++和Java相似,但它是一种弱类型的语言,意味着变量在声明时无需...
这篇小结将聚焦于JavaScript的基础和进阶知识,帮助你在面试中表现出色。以下是对"javascript面试应急知识点小结"的详细解析。 一、基础概念 1. 变量与数据类型:JavaScript有七种数据类型,包括基本数据类型...
本文实例讲述了JavaScript创建对象方法。分享给大家供大家参考,具体如下: 最简单的方式就是创建一个Object对象,并为其添加属性和方法。 //示例代码 var person=new Object() person.name=yumi person.age=18 ...
在JavaScript中创建对象有多种方式,尽管JavaScript不严格遵循传统意义上的面向对象语言特性,比如继承、封装和多态,但它提供了一些方法和技巧来模拟面向对象的行为。以下将详细阐述文章中提到的四种创建JavaScript...
在这个`javascript div小结`中,我们将深入探讨JavaScript如何与`div`元素交互,包括选择、操作、动态创建以及CSS样式修改等关键知识点。 首先,我们可以通过JavaScript的DOM(Document Object Model)接口来获取和...
### JavaScript 创建对象和构造类实现代码 在JavaScript中,创建对象和定义类是进行面向对象编程的基础。本文将深入探讨几种不同的创建对象的方法以及如何通过构造函数和原型链来实现类的概念。 #### 1. 使用对象...
在JavaScript中,一切皆为对象,包括基本数据类型如字符串(String)、数值(Number)、数组(Array)和函数(Function)。对象是由属性(properties)和方法(methods)组成的特殊数据类型,它们允许我们存储和操作...
在实际开发中,JavaScript的日期处理不仅限于基本的获取和设置,还可以用于创建复杂的日历功能、计时器、倒计时等。同时,现代JavaScript提供了`Date.now()`用于获取当前时间的毫秒值,以及`Intl.DateTimeFormat`...
小结 第3章 字面量和构造函数 对象字面量 自定义构造函数 强制使用new的模式 数组字面量 JSON 正则表达式字面量 基本值类型包装器 错误对象 小结 第4章 函数 背景 回调模式 返回函数 ...