- 浏览: 321587 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhangliguoaccp:
对于女人不要太看重吧,喜欢你的自然留下,你若盛开,蝴蝶自来!
遇见她 -
yiqi1943:
springtest支持的spring版本最低是多少啊
Spring Test -
WITLP:
爱,我只知道你一部分的事情,没想到你从华智出来这么坎坷
2009 为什么待到毕业时? -
WITLP:
哈哈,原来你就是传说中的欧阳平?
ANT 简单使用 -
bo_hai:
谢谢。总结的很好。
工具 PL/SQL 快捷键
对于丑陋的事物,爱会闭目无视
JavaScript中的对象是可变的键控集合(keyed collections)
对象是属性的容器,其中每个属性都拥有名字和值。属性的名字可以是
包括字符串在内的任意字符串,属性值可以是除undefined值之外的任何值
JavaScript中的对象是无类别的,它对新属性的名字和值没有约束。对象适合
用于收集和管理数据。对象可以包含其他对象,所以它们可以容易地表示成
树形或图形结构(注意:树和图强大的数据结构)
JavaScript包括一个原型链特性,允许对象继承另一对象的属性。正确地使用它能
减少对象初始化的时间和内存消耗
对象检索
||运算符可以用来填充默认值
原型
返回对象类型原型的引用。
objectName.prototype
objectName 参数是对象的名称
原型连接在更新时是不起作用的,当我们对某个对象做出改变时,不会触及到该对象
的原型,原型连接只有在检索值的时候才被用到,如果我们尝试去获取对象的某个属性,且
该对象没有此属性,那么JavaScript会试着从原型对象中获取属性值。如果那个原型对象也
没有该属性,那么再从它的原型中寻找,依次类推,直到该过程最后到达
终点Object.prototype,如果想要的属性完全不存在于原型链中,那么结果就是
undefied值,这个过程成为委托。
此处转载 http://fengsky491.iteye.com/blog/228583 谢谢 fengsky491
JScript里的prototype,为什么我们说它和prototype pattern里的prototype不一样呢?! 这个不是我说就说出来的,也不是我吹出来的,看看这个示例,你就能大概糊涂:
好玩吧,看出来什么名堂了吗?这里的RP.PropertyA和RP.MethodA只是用来做参照的,可是怎么把this.PropertyA和this.MethodA都delete了,还能出来结果,而且还是prototype导入的属性和方法呢?
这就是JScript的prototype和prototype pattern中prototype最大的不同了,JScript中的这个所谓的prototype属性其实是个语言本身支持的特性,这里没有发生任何的copy,不管shallow还是deep的。对于JScript的解释引擎,它在处理"."或"[keyName]"引用的对象的属性和方法时,先在对象本身的实例(this)中查找,如果找到就返回或执行。如果没有查找到,就查找对象的prototype(this.constructor.prototype)里是否定义了被查找的对象和方法,如果找到就返回或执行,如果没有查找到,就返回undefined(对于属性)或runtime error(对于方法)。
正因为prototype导入类实例的属性或方法是动态查找的,所以我们才能对系统内部对象添加prototype属性和方法,比如给String对象添加trim方法:
显然JScript中的这种用法也是prototype pattern中的prototype不能解释和支持的。
这下对于JScript OOP中原型继承法的理解因该没有任何的障碍了吧?同时也应该明白为什么原型继承法有那么大的天生缺陷了吧?当然如果有任何问题,欢迎继续讨论。
反射
检查对象并确定对象有什么属性是很容易的事情,只要试着去检索
该属性并验证取得的值,typeof操作符对确定属性的类型很有帮助。
另一个方法是使用hasOwnProperty方法,如果对象拥有独有的属性,它将返回true.
hasOwnProperty方法不会检查原型连
枚举(对象属性)
for in 语句可用来遍历一个对象中的所有属性名,该枚举过程将会列出所有的属性
包括函数和你可能不关心的原型中的属性,所以有必要过滤掉那些你不想要的值。最为常用
的过滤器是hasOwnProperty方法,以及使用typeof来排除函数:
属性名出现的顺序是不确定的,因此要对任何可能出现的顺序有所准备,如果你想要确保属性以特定的顺序出现,
最好的办法就是完全避免使用 for in语句,而是创建一个数组,在其中以正确的顺序包含属性名
正确的顺序取得了它们的值。
JavaScript中的对象是可变的键控集合(keyed collections)
对象是属性的容器,其中每个属性都拥有名字和值。属性的名字可以是
包括字符串在内的任意字符串,属性值可以是除undefined值之外的任何值
JavaScript中的对象是无类别的,它对新属性的名字和值没有约束。对象适合
用于收集和管理数据。对象可以包含其他对象,所以它们可以容易地表示成
树形或图形结构(注意:树和图强大的数据结构)
JavaScript包括一个原型链特性,允许对象继承另一对象的属性。正确地使用它能
减少对象初始化的时间和内存消耗
对象检索
var empty_object = {}; var stooge = { "first-name":"Ouyang", "last-name":"ping", "yyl":"yyl" } alert(stooge["first-name"]); //Ouyang alert(stooge.first-name);//NaN alert(stooge.yyl)//yyl alert(stooge.name);//undefined
||运算符可以用来填充默认值
var middle = stooge["middle-name"] ||"none"; flight.equipment // undefined flight.equipment.model // throw "TypeError" flight.equipment && flight.equipment.model //undefined
原型
返回对象类型原型的引用。
objectName.prototype
objectName 参数是对象的名称
原型连接在更新时是不起作用的,当我们对某个对象做出改变时,不会触及到该对象
的原型,原型连接只有在检索值的时候才被用到,如果我们尝试去获取对象的某个属性,且
该对象没有此属性,那么JavaScript会试着从原型对象中获取属性值。如果那个原型对象也
没有该属性,那么再从它的原型中寻找,依次类推,直到该过程最后到达
终点Object.prototype,如果想要的属性完全不存在于原型链中,那么结果就是
undefied值,这个过程成为委托。
function TestObjectA() { this.MethodA = function() { alert('TestObjectA.MethodA()'); } } function TestObjectB() { this.bb = 'ccc'; this.MethodB = function() { alert('TestObjectB.MethodB()'); } } TestObjectB.prototype = new TestObjectA(); //TestObjectB继承了 TestObjectA的方法 TestObjectB.prototype.bb = 'aaaaa'; //添加属性 var temp var b = new TestObjectB(); for (temp in b) { alert(temp); // MethodA bb MehtedB } var kk = new TestObjectB(); //删除,但原型链中的没有删除 alert(kk.bb); // ccc delete kk.bb; alert(kk.bb); // aaaa alert(kk.MethodA()); //TestObjectA.MethodA()
此处转载 http://fengsky491.iteye.com/blog/228583 谢谢 fengsky491
JScript里的prototype,为什么我们说它和prototype pattern里的prototype不一样呢?! 这个不是我说就说出来的,也不是我吹出来的,看看这个示例,你就能大概糊涂:
<script language="javascript"> function RP() { RP.PropertyA = 1; RP.MethodA = function() { alert("RP.MethodA "); }; this.PropertyA = 100; this.MethodA = function() { alert("this.MethodA"); }; } RP.prototype.PropertyA = 10; RP.prototype.MethodA = function() { alert("RP.prototype.MethodA"); }; </script>不要着急,还没有开始做示例,只是给出了我们用来演示的一个类。RP是什么?rpwt吗?当然不是了,RP是ResearchPrototype了。好了不废话了,看示例及结果分析。
<script language="javascript"> rp = new RP(); alert(RP.PropertyA); RP.MethodA(); alert(rp.PropertyA); rp.MethodA(); </script> 运行结果闪亮登场: 1 RP.MethodA 100 this.MethodA 这个%$@#^$%&^...,不要着急,继续看哦!
<script language="javascript"> rp = new RP(); delete RP.PropertyA; alert(RP.PropertyA); delete RP.MethodA; RP.MethodA(); delete rp.PropertyA; alert(rp.PropertyA); delete rp.MethodA; rp.MethodA(); </script> 运行结果再次登场: undefined A Runtime Error has occurred. Do you wish to Debug? Line: 32 Error: Object doesn't support this property or method 10 RP.prototype.MethodA
好玩吧,看出来什么名堂了吗?这里的RP.PropertyA和RP.MethodA只是用来做参照的,可是怎么把this.PropertyA和this.MethodA都delete了,还能出来结果,而且还是prototype导入的属性和方法呢?
这就是JScript的prototype和prototype pattern中prototype最大的不同了,JScript中的这个所谓的prototype属性其实是个语言本身支持的特性,这里没有发生任何的copy,不管shallow还是deep的。对于JScript的解释引擎,它在处理"."或"[keyName]"引用的对象的属性和方法时,先在对象本身的实例(this)中查找,如果找到就返回或执行。如果没有查找到,就查找对象的prototype(this.constructor.prototype)里是否定义了被查找的对象和方法,如果找到就返回或执行,如果没有查找到,就返回undefined(对于属性)或runtime error(对于方法)。
正因为prototype导入类实例的属性或方法是动态查找的,所以我们才能对系统内部对象添加prototype属性和方法,比如给String对象添加trim方法:
<script lanuage="javascript"> String.prototype.trim() { return this.replace(/(^\s+)|(\s+$)/g, ""); } </scritp>
显然JScript中的这种用法也是prototype pattern中的prototype不能解释和支持的。
这下对于JScript OOP中原型继承法的理解因该没有任何的障碍了吧?同时也应该明白为什么原型继承法有那么大的天生缺陷了吧?当然如果有任何问题,欢迎继续讨论。
反射
检查对象并确定对象有什么属性是很容易的事情,只要试着去检索
该属性并验证取得的值,typeof操作符对确定属性的类型很有帮助。
typeof flight.number
另一个方法是使用hasOwnProperty方法,如果对象拥有独有的属性,它将返回true.
hasOwnProperty方法不会检查原型连
flight.hasOwnProperty('nubmer');
枚举(对象属性)
for in 语句可用来遍历一个对象中的所有属性名,该枚举过程将会列出所有的属性
包括函数和你可能不关心的原型中的属性,所以有必要过滤掉那些你不想要的值。最为常用
的过滤器是hasOwnProperty方法,以及使用typeof来排除函数:
var name; for (name in another_stooge) { if (typeof another_stooge[name] != 'function') { document.writeln(name+':'+another_stooge[name]); } }
属性名出现的顺序是不确定的,因此要对任何可能出现的顺序有所准备,如果你想要确保属性以特定的顺序出现,
最好的办法就是完全避免使用 for in语句,而是创建一个数组,在其中以正确的顺序包含属性名
var i ; var properties = [ 'first-name', 'middle-name', 'last-name', 'profession' ]; for (i = 0 ; i < properties.length; i += 1) { document.writeln(properties[i]+':'+another_stooge[properties[i]]); }通过使用for而不是for in ,可以得到我们想要的属性,而不用担心可能发掘出原型链中的属性,并且我们按
正确的顺序取得了它们的值。
发表评论
-
可输入的下拉框,兼容IE6,7,8,9
2013-06-21 14:26 1308有时候因为包含了这一部分导致下拉框不可使用: <! ... -
JS Web前段性能问题
2011-03-29 18:00 838Web前段性能问题 -
JS body.clientWidth,documentElement.clientWidth,clientX
2011-03-29 16:50 1736event的x,clientX,offsetX ... -
自写 js validation 验证框架
2011-02-15 16:32 1656一、背景: 一个 ... -
JS jquery ajax post html
2010-06-30 15:14 1641$(document).ready(function(){ ... -
JS jquery自动补全
2010-06-30 14:18 2590思路: 1 输入字符串,keyup事件,通过输入的字符串去 ... -
JS jquery常用语法
2010-06-30 14:05 906$("#id").val(); $( ... -
JS 过滤特殊字符
2010-06-29 15:44 3104<input type = "text&quo ... -
JS 注册监听
2010-06-22 15:45 1286<div id ="testdiv" ... -
JS Jquery 锁屏
2010-06-22 13:26 2471http://jquery.malsup.com/block/ ... -
JS 判断是否IE浏览器
2010-06-12 12:33 1399var ie = 0/*@cc_on+1@*/ ; 利用IE ... -
JS event获取触发事件的对象
2010-04-21 09:11 1280更多信息查询API <script> <s ... -
JS js控制鼠标左右键和复制粘贴事件
2010-04-12 20:27 3527JS js控制鼠标左右键和 ... -
JS js控制select多选
2010-04-07 10:46 1854<script> function move ... -
JS 转换函数和属性定义范围
2010-04-07 09:54 938<script> //转换函数 eval() ... -
JS 加码解码
2010-04-07 09:52 1506<script> //javascript加码解 ... -
JS 定时任务setTimeout与setInterval
2010-04-07 09:49 2021~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ... -
JS 框架跳转
2010-04-06 13:06 1364<script language="javas ... -
JS prototype例子原型与继承
2010-03-29 16:15 1728prototype 属性 返回对象类型原型的引用。 ... -
JS 获得当前实时日期和时分秒星期 日期比较 当前日期格式化
2010-03-26 13:36 3041这些查API文档,一目了然,这是一个js获得当前实时日期和时分 ...
相关推荐
《JavaScript语言精粹》这本书是深入理解这一语言的宝贵资源,它涵盖了JavaScript的核心概念和技术,旨在帮助读者掌握这门语言的精髓。 在描述中提到的"JavaScript语言精粹 包含pdf 与 epub"表明,这本书提供了两种...
3. **原型与继承**:JavaScript的面向对象特性体现在其独特的原型链机制,通过理解原型和原型链,可以掌握对象的继承与扩展。 4. **DOM操作**:JavaScript与HTML的交互主要通过DOM(文档对象模型),学习如何选择...
2. **对象与原型**:JavaScript中的对象是其特性的核心,涉及对象创建、属性访问、原型链、构造函数、实例化等概念。 3. **闭包**:理解闭包是进阶JavaScript的关键,它涉及到作用域、变量生命周期和函数作为值的...
《JavaScript语言精粹》是一本深受开发者欢迎的权威书籍,旨在深入探讨JavaScript这门重要的编程语言,帮助初学者和有经验的程序员掌握其核心概念和最佳实践。这本书以中文高清PDF的形式提供,使得读者可以方便地...
2. **对象和原型**:JavaScript的对象是一种基于原型的模式,这意味着对象可以从其他对象继承属性和方法。书中详细解释了如何创建和操作对象,以及原型链的工作原理。 3. **函数作为一等公民**:在JavaScript中,...
《JavaScript语言精粹 修订版》是一本深受前端开发者喜爱的经典教材,专注于讲解JavaScript的核心概念和最佳实践。这本书深入浅出地介绍了JavaScript的精髓,帮助读者掌握这门强大的脚本语言,尤其对于前端开发人员...
此外,JavaScript的对象和原型机制是其独特之处,理解原型链、构造函数以及继承方式(如原型继承、组合继承、寄生组合继承、ES6的类继承)对于深入JavaScript至关重要。书中的修订版可能会涵盖最新的ES6及其后续版本...
JavaScript语言精粹_修订版.pdf
3. **对象与原型**:JavaScript使用原型链实现继承,理解对象和原型的关系对于深入学习面向对象编程至关重要。 4. **异步编程**:事件循环、回调函数、Promise、async/await,这些都是JavaScript处理非阻塞I/O的...
还有原型和原型链,这是JavaScript实现继承的主要方式,理解它们对于深入学习对象导向编程至关重要。 此外,JavaScript的异步编程是其独特之处,通过回调函数、Promise和async/await等机制处理非阻塞操作,使得网页...
《JavaScript语言精粹(修订版)》是JavaScript编程领域的一部经典著作,由知名的JavaScript专家Douglas Crockford撰写。这本书深入浅出地探讨了JavaScript的核心特性,旨在帮助读者掌握这门语言的精髓,提高编程...
本书通过对JavaScript语言的分析,甄别出好的和坏的特性,从而提取出相对这门语言的整体而言具有更好的可靠性、可读性和可维护性的JavaScript的子集,以便你能用它创建真正可扩展的和高效的代码。 雅虎资深...
JavaScript语言精粹修订版pdf是许多朋友都在寻找的一款学习资料,在这里能够为您详细的介绍JS这门计算机语言,作者从语法、对象、函数、继承、数组、正则表达式、方法、样式和优美的特性这9 个方面来呈现这门语言...
原型和继承是JavaScript实现面向对象编程的关键特性,它们允许对象之间共享属性和方法。 书中还会深入探讨作用域和闭包,这是理解JavaScript内存管理的关键。作用域决定了变量的可见性和生命周期,而闭包则允许函数...