这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
对象的 constructor 属性用于返回创建该对象的函数,也就是我们常说的构造函数,除了创建对象,构造函数 (constructor) 还做了另一件有用的事情—自动为创建的新对象设置了原型对象 (prototype object)
除了创建对象,构造函数 (constructor) 还做了另一件有用的事情—自动为创建的新对象设置了原型对象 (prototype object) 。原型对象存放于 ConstructorFunction.prototype 属性中。
例如,我们重写之前例子,使用构造函数创建对象 "b" 和 "c",那么对象 "a" 则扮演了 "Foo.prototype" 这个角色:
- // 构造函数
- function Foo(y) {
- // 构造函数将会以特定模式创建对象:被创建的对象都会有"y"属性
- this.y = y;
- }
- // "Foo.prototype"存放了新建对象的原型引用
- // 所以我们可以将之用于定义继承和共享属性或方法
- // 所以,和上例一样,我们有了如下代码:
- // 继承属性"x"
- Foo.prototype.x = ;
- // 继承方法"calculate"
- Foo.prototype.calculate = function (z) {
- return this.x + this.y + z;
- };
- // 使用foo模式创建 "b" and "c"
- var b = new Foo();
- var c = new Foo();
- // 调用继承的方法
- b.calculate(); //
- c.calculate(); //
- // 让我们看看是否使用了预期的属性
- console.log(
- b.__proto__ === Foo.prototype, // true
- c.__proto__ === Foo.prototype, // true
- // "Foo.prototype"自动创建了一个特殊的属性"constructor"
- // 指向a的构造函数本身
- // 实例"b"和"c"可以通过授权找到它并用以检测自己的构造函数
- b.constructor === Foo, // true
- c.constructor === Foo, // true
- Foo.prototype.constructor === Foo // true
- b.calculate === b.__proto__.calculate, // true
- b.__proto__.calculate === Foo.prototype.calculate // true
- );
上述代码可表示为如下的关系:
构造函数与对象之间的关系
上述图示可以看出,每一个 object 都有一个 prototype. 构造函数 Foo 也拥有自己的__proto__, 也就是 Function.prototype, 而 Function.prototype 的__proto__指向了 Object.prototype. 重申一遍,Foo.prototype 只是一个显式的属性,也就是 b 和 c 的__proto__属性。
这个问题完整和详细的解释有两个部分:
面向对象编程. 一般理论 (OOP. The general theory),描述了不同的面向对象的范式与风格 (OOP paradigms and stylistics),以及与 ECMAScript 的比较。
面向对象编程. ECMAScript 实现 (OOP. ECMAScript implementation), 专门讲述了 ECMAScript 中的面向对象编程。 现在,我们已经了解了基本的 object 原理,那么我们接下去来看看 ECMAScript 里面的程序执行环境 [runtime program execution]. 这就是通常称为的 "执行上下文堆栈"[execution context stack]。每一个元素都可以抽象的理解为 object。你也许发现了,没错,在 ECMAScript 中,几乎处处都能看到 object 的身影。
下面给大家介绍 JavaScript constructor 属性详解
对象的 constructor 属性用于返回创建该对象的函数,也就是我们常说的构造函数。
在 JavaScript 中,每个具有原型的对象都会自动获得 constructor 属性。除了 arguments、Enumerator、Error、Global、Math、RegExp、Regular Expression 等一些特殊对象之外,其他所有的 JavaScript 内置对象都具备 constructor 属性。例如:Array、Boolean、Date、Function、Number、Object、String 等。所有主流浏览器均支持该属性。
语法
object.constructor
返回值
对象的 constructor 属性返回创建该对象的函数的引用。
示例 & 说明
以下代码中的 [native code],表示这是 JavaScript 的底层内部代码实现,无法显示代码细节。
- // 字符串:String()
- var str = "张三";
- document.writeln(str.constructor); // function String() { [native code] }
- document.writeln(str.constructor === String); // true
- // 数组:Array()
- var arr = [1, 2, 3];
- document.writeln(arr.constructor); // function Array() { [native code] }
- document.writeln(arr.constructor === Array); // true
- // 数字:Number()
- var num = 5;
- document.writeln(num.constructor); // function Number() { [native code] }
- document.writeln(num.constructor === Number); // true
- // 自定义对象:Person()
- function Person() {
- this.name = "CodePlayer";
- }
- var p = new Person();
- document.writeln(p.constructor); // function Person(){ this.name = "CodePlayer"; }
- document.writeln(p.constructor === Person); // true
- // JSON对象:Object()
- var o = {
- "name": "张三"
- };
- document.writeln(o.constructor); // function Object() { [native code] }
- document.writeln(o.constructor === Object); // true
- // 自定义函数:Function()
- function foo() {
- alert("CodePlayer");
- }
- document.writeln(foo.constructor); // function Function() { [native code] }
- document.writeln(foo.constructor === Function); // true
- // 函数的原型:bar()
- function bar() {
- alert("CodePlayer");
- }
- document.writeln(bar.prototype.constructor); // function bar(){ alert("CodePlayer"); }
- document.writeln(bar.prototype.constructor === bar); // true
来源: http://www.phperz.com/article/17/0411/268859.html