- 浏览: 450060 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (377)
- Java (66)
- C++ (0)
- VC++ (0)
- .net (1)
- css (36)
- 数据库 (22)
- html (2)
- extjs (1)
- jpbm (0)
- javascript (31)
- 物资管理 (1)
- java基础 (5)
- C# (0)
- Android (56)
- window service (1)
- 其他 (2)
- Web服务器 (7)
- jbpm (1)
- eclipse (2)
- tomcat (3)
- java字符串与二进制的相互转化 (1)
- Oracle 数据库 (6)
- FreeMarker (8)
- 浏览器 (1)
- php (1)
- photoshop (6)
- spring (4)
- spring mvc (2)
- Acegi (1)
- webStorm 3.0 (4)
- Mongodb (8)
- mysql (9)
- 软件开发:需求分析 (1)
- 把Java程序作为Windows系统服务 (1)
- nodejs (4)
- json (1)
- 缓存 (1)
- J2ee (2)
- Flash报表 (1)
- MyEclipse+Maven+Tomcat (11)
- 生活 (1)
- Ubuntu (1)
- Bootstrap (1)
- jquery easy ui (2)
- 敏捷开发 (1)
- phone gap (1)
- rest (1)
- 移动开发 (22)
- Redis + Jedis + Spring (3)
- anroid (7)
- grunt 教程 (7)
- PhoneGap (2)
- sublime text (7)
- mariadb (1)
- linux (1)
- maven (2)
- jquery (1)
- ActiveMQ (1)
- LVS Nginx (1)
- nginx (6)
- ngnix (1)
- 爱因斯坦 (1)
- 天干地支 (1)
最新评论
-
muqingren:
...
Maven多模块布局实例详解 -
shutear:
解决了我的难题,谢谢分享!
Unable to load configuration. - action - file:/D:/studytool/apache-tomcat-6.0.16 -
702346318:
[img][/img][flash=200,200][/fla ...
CAS单点登录完整教程(上)【转】 -
liuguofeng:
Person<div class="quote ...
js constructor属性 -
S631887934:
学习中。。 有个问题想请教楼主为什么要加上Person.pro ...
js constructor属性
constructor属性始终指向创建当前对象的构造函数。比如下面例子:
var arr = [1, 56, 34, 12]; // 等价于 var foo = new Array(1, 56, 34, 12); document.writeln(arr.constructor === Array);// true
在看下面的例子
var foo = new Function(); var Foo = function() { }; document.writeln(Foo.constructor === Function); // true // 由构造函数实例化一个obj对象 var obj = new Foo(); document.writeln(obj.constructor === Foo); // true // 将上面两段代码合起来,就得到下面的结论 document.writeln(obj.constructor.constructor === Function); // true
但是当constructor遇到prototype时,有趣的事情就发生了。 我们知道每个函数都有一个默认的属性prototype, 而这个prototype的constructor默认指向这个函数。如下例所示: Java代码 function Person(name) { this.name = name; }; Person.prototype.getName = function() { return this.name; }; var p = new Person("ZhangSan"); document.writeln(p.constructor === Person);// true document.writeln(Person.prototype.constructor === Person); // true // 将上两行代码合并就得到如下结果 document.writeln(p.constructor.prototype.constructor === Person); // true function Person(name) { this.name = name; }; Person.prototype.getName = function() { return this.name; }; var p = new Person("ZhangSan"); document.writeln(p.constructor === Person);// true document.writeln(Person.prototype.constructor === Person); // true // 将上两行代码合并就得到如下结果 document.writeln(p.constructor.prototype.constructor === Person); // true 当时当我们重新定义函数的prototype时(注意:和上例的区别,这里不是修改而是覆盖), constructor属性的行为就有点奇怪了,如下示例: Java代码 function Person(name) { this.name = name; }; Person.prototype = { getName: function() { return this.name; } }; var p = new Person("ZhangSan"); document.writeln(p.constructor === Person); // false document.writeln(Person.prototype.constructor === Person); // false document.writeln(p.constructor.prototype.constructor === Person); // false function Person(name) { this.name = name; }; Person.prototype = { getName: function() { return this.name; } }; var p = new Person("ZhangSan"); document.writeln(p.constructor === Person); // false document.writeln(Person.prototype.constructor === Person); // false document.writeln(p.constructor.prototype.constructor === Person); // false 为什么呢? 原来是因为覆盖Person.prototype时,等价于进行如下代码操作: Java代码 Person.prototype = new Object({ getName: function() { return this.name; } }); Person.prototype = new Object({ getName: function() { return this.name; } }); 而constructor属性始终指向创建自身的构造函数, 所以此时Person.prototype.constructor === Object,即是: Java代码 function Person(name) { this.name = name; }; Person.prototype = { getName: function() { return this.name; } }; var p = new Person("ZhangSan"); document.writeln(p.constructor === Object); // true document.writeln(Person.prototype.constructor === Object); // true document.writeln(p.constructor.prototype.constructor === Object); // true function Person(name) { this.name = name; }; Person.prototype = { getName: function() { return this.name; } }; var p = new Person("ZhangSan"); document.writeln(p.constructor === Object); // true document.writeln(Person.prototype.constructor === Object); // true document.writeln(p.constructor.prototype.constructor === Object); // true 怎么修正这种问题呢?方法也很简单,重新覆盖Person.prototype.constructor即可: Java代码 function Person(name) { this.name = name; }; Person.prototype = new Object({ getName: function() { return this.name; } }); Person.prototype.constructor = Person; // 如此也可以 /* Person.prototype = new Object({ constructor:Person, getName: function() { return this.name; } }); Person.prototype = { constructor:Person, getName: function() { return this.name; } }; */ var p = new Person("ZhangSan"); document.writeln(p.constructor === Person); // true document.writeln(Person.prototype.constructor === Person); // true document.writeln(p.constructor.prototype.constructor === Person); // true
评论
3 楼
liuguofeng
2012-05-23
Person
你去了解一下运算符,你就清楚了
S631887934 写道
学习中。。 有个问题想请教楼主
为什么要加上Person.prototype.constructor = Person;
除了让constructor重新指向Person外,如果不修改会对功能方面有什么其他影响吗?
为什么要加上Person.prototype.constructor = Person;
除了让constructor重新指向Person外,如果不修改会对功能方面有什么其他影响吗?
你去了解一下运算符,你就清楚了
2 楼
S631887934
2012-05-22
学习中。。 有个问题想请教楼主
为什么要加上Person.prototype.constructor = Person;
除了让constructor重新指向Person外,如果不修改会对功能方面有什么其他影响吗?
为什么要加上Person.prototype.constructor = Person;
除了让constructor重新指向Person外,如果不修改会对功能方面有什么其他影响吗?
1 楼
hhzhaoheng
2012-05-17
thanks for your code and your efforts
发表评论
-
Array.prototype.slice.call
2014-11-01 15:18 762在研究某个框架源码的时候,看到的。查了下资料,1.两个部分, ... -
深入理解jQuery插件开发
2014-11-01 12:17 503如果你看到这篇文章,我确信你毫无疑问会认为jQuery是一个 ... -
jquery 控制能输入数字和字母
2014-10-18 15:37 715内容",而"禁用输入法,获取剪切板的内 ... -
值得收藏的新jQuery插件
2014-09-25 22:39 7101) slideshow Really Simple S ... -
窗口大小 window.innerWidth 、window.innerHeight、document.documentElement.clientWidth、
2014-07-27 09:52 910/ Firefox、Chrome、Safari、Opera ... -
精选在线课程:前端开发入门、进阶与实战(中文系列)
2014-07-26 22:06 0在线教育的浪潮吸引了越来越多的网站加入,争相推出各种课程吸引 ... -
浏览器缓存机制
2014-07-26 13:19 662浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: ... -
JavaScript中双叹号“!!”作用
2014-07-25 23:20 495经常看到这样的例子: var a;var b=!!a; ... -
js中style,currentStyle和getComputedStyle的区别
2014-07-13 09:51 780<style> body{margin:0 a ... -
JS OffsetParent属性
2014-06-14 11:12 684offsetParent属性返回一个对象的引用,这个对象 ... -
javascript两行代码按指定格式输出日期时间
2014-05-11 14:33 652// <summary>// 格式化显示日期时间/ ... -
Js中sort()方法的用法
2012-10-12 11:25 1103关键字: sort, 排序方 ... -
网页常用特效整理
2012-04-21 17:37 9501.节日倒计时 < ... -
jquery validate自定义验证方法(转)
2012-03-30 10:55 1063// 身份证号码验证 jQuery.validator ... -
document.documentElement和document.body的区别
2012-03-13 12:00 807网页中获取滚动条卷去部分的高度,可以通过 document.b ... -
document.compatMode属性
2012-03-13 11:58 932document.compatMode用来判断当前浏览器采 ... -
js库建设方案
2012-03-13 11:58 1083前言: 自从互联网诞生之日起,JavaScript就成为 ... -
关于scrolltop 兼容 IE6/7/8, Safari,FF的方法
2012-03-13 11:57 22081、各浏览器下 scrollTop的差异IE6/7/8 ... -
IE内存泄露监测工具 sIEve介绍
2012-03-08 10:23 1273在IE下监控页面内存资 ... -
网站优化之Ajax优化及相关工具
2012-03-08 09:56 1015web2.0大量的ajax的使用,提高了ui交互的效率,但 ...
相关推荐
JavaScript constructor 属性在类型检查中的应用 在 JavaScript 中,constructor 属性是一种非常有用的工具,可以帮助我们检查变量的类型。Constructor 属性可以帮助我们解决 typeof 函数无法解决的问题,即无法...
// prototype对象有一个constructor属性,指向BB这个函数。 console.log(b.constructor === BB.prototype.constructor); // true ``` 这段代码说明了`constructor`属性的基本作用: 1. **原型链上的引用**:`...
对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数,除了创建对象,构造函数(constructor) 还做了另一件有用的事情—自动为创建的新对象设置了原型对象(prototype object)
真正的原因是:一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个constructor属性,指向的是它自己。 我觉得Javascript的设计本意是让...
首先,constructor属性存在于所有的JavaScript对象之中,它指向创建当前对象的构造函数。通过这个属性,我们可以获得对象的创建来源,同时也可以用来判断对象的类型。例如,我们创建了一个新对象后,可以通过...
在JavaScript中,constructor属性是一个非常重要的基础概念,它出现在类(Class)和继承(Inheritance)的实现中。constructor属性主要用于识别创建某个对象的构造函数。通常情况下,构造函数的prototype对象会拥有...
prototype对象有constructor属性指向BB这个函数;所以alert(b.constructor==BB.prototype.constructor) //true 这里的“有了”的执行过程是先查看b有没有此属性让后去查看prototype里的属性值,不是简单的A=...
constructor 属性是 JavaScript 中的一种特殊属性,它返回对创建此对象的数组函数的引用。下面我们来深入浅析 JavaScript 中的 constructor。 constructor 属性是一个非标准的 JavaScript 属性,但是在大多数...
在JavaScript(JS)编程语言中,确定变量或对象的类型是一项基本且重要的任务。这不仅有助于理解代码的行为,还能在调试、数据验证以及实现特定功能时提供帮助。本文将深入探讨四种常用的方法来识别和判断JavaScript...
在JavaScript中,constructor属性是对象模型的一个重要部分,它用于指出创建对象的构造函数。在理解了对象模型之后,我们可以更深入地探讨constructor属性的实现原理。 首先,constructor属性可以被看作是对象的...
在 JavaScript 中,几乎所有的数据类型都有一个 constructor 属性,它指向创建这个数据的构造函数。而 prototype 则是函数所特有的属性,它让函数可以被用作构造器来创建实例,同时这些实例可以共享相同的方法和属性...
`constructor`属性被重置,以便正确地引用`Student`构造函数。 总结,JavaScript中的构造函数是创建和初始化对象的关键工具。通过定义构造函数,我们可以创建自定义的类型,设置对象的属性和方法,并实现面向对象的...
然而,由于JavaScript的动态性,constructor属性是可以被修改的,所以在实际开发中,更推荐使用`Array.isArray()`方法来确定一个对象是否为数组。 此外,Array对象还包含许多其他的方法,如`push()`、`pop()`、`...
在JavaScript中,`constructor`属性是一个非常重要的概念,它与对象和类的构造函数紧密相关。构造函数是一种特殊类型的函数,通常用于初始化新创建的对象。当我们谈论`constructor`时,我们指的是一个对象实例的`...
在JavaScript中,遍历属性、理解`prototype`和掌握继承机制是编程中不可或缺的基本技能。本文将深入探讨这些概念,并通过实例来加深理解。 首先,让我们来看如何遍历JavaScript对象的属性。JavaScript提供了多种...