javascript对象constructor属性

概述

返回一个指向创建了该对象原型的函数引用。需要注意的是,该属性的值是那个函数本身,而不是一个包含函数名称的字符串。对于原始值(如1,true 或 "test"),该属性为只读。

描述

所有对象都会从它的原型上继承一个 constructor 属性:

var o = new Object // 或者 o = {}
o.constructor == Object
var a = new Array  // 或者 a = []
a.constructor == Array
var n = new Number(3)
n.constructor == Number

即使一些DOM对象并不是你用构造函数生成的,但你仍然可以将它们与对应的构造函数进行比较。比如:

document.constructor == Document;
document.form3.constructor == Form;

示例

例1: 打印出一个对象的构造函数

下例首先创建了一个构造原型(即构造函数)Tree 和该原型的一个对象 theTree。接着打印出了对象 theTree 的 constructor 属性。

function Tree(name) {
   this.name = name;
}

var theTree = new Tree("Redwood");
console.log( "theTree.constructor is " + theTree.constructor );

打印输出:

theTree.constructor is function Tree(name) {
    this.name = name;
}

例2: 改变这个对象的constructor属性的值

下面的例子展示了如何修改基本类型对象的 constructor 属性的值。只有 true, 1 和 "test" 的不受影响,因为创建他们的是只读的原生构造函数(native constructors)。这个例子也说明了依赖一个对象的 constructor 属性并不安全。

function Type() { };

var    types = [
    new Array,
    [],
    new Boolean,
    true,        // remains unchanged
    new Date,
    new Error,
    new Function,
    function(){},
    Math,
    new Number,
    1,           // remains unchanged
    new Object,
    {},
    new RegExp,
    /(?:)/,
    new String,
    "test"       // remains unchanged
];

for(var i = 0; i < types.length; i++) {
    types[i].constructor = Type;
    types[i] = [ types[i].constructor, types[i] instanceof Type, types[i].toString() ];
};

console.log( types.join("\n") );

规范

规范版本 规范状态 注解
ECMAScript 1st Edition. Implemented in JavaScript 1.1 Standard Initial definition.
ECMAScript 5.1 (ECMA-262)
Objectprototype.constructor
Standard  
ECMAScript 6 (ECMA-262)
Object.prototype.constructor
Draft

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
时间: 2024-07-30 23:26:24

javascript对象constructor属性的相关文章

javascript对象的属性,方法,prototype作用范围分析

读了篇博客感觉很有用"javascript对象的属性,方法,prototype作用范围分析"就自己写了一遍.以后自己可以用的到. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://

Javascript对象的属性及方法

以下注释中的说法相对于PHP等语言的类对象的属性及方法,因为Javascript首先没有“类”这一说法,也不存在静态非静态.属性/方法作用域这一说法. function obj() { var v = '';//私有静态属性 var f = function(){};//私有方法 } ------------------------------------ obj.v = '';//公共静态属性 obj.f = function(){};//公共静态方法 给类本身扩展属性和方法,只能通过类名访问

javascript的constructor属性

/* constructor 属性 constructor 属性返回所有 JavaScript 变量的构造函数. */console.log("John".constructor); // 返回函数 String() { [native code] }console.log((3.14).constructor); // 返回函数 Number() { [native code] }console.log(false.constructor); // 返回函数 Boolean() {

JavaScript对象之属性标签

本文介绍一下js对象的属性标签(configurable.writable.enumerable.value.get.set)的使用. 上图的要点为: 1.Object.getOwnPropertyDescriptor(obj,attr)可以获取属性标签的信息. 2.configurable控制属性是否可配置,writable控制属性是否可直接修改,enumerable控制属性是否可被枚举出来. 上图中Object.keys(person)不会输出不能被枚举的对象属性. 上图的要点为: 1.使用

了解JavaScript 对象的属性操作

提起操作, 很多人都会想到我们学习过程中最经常做的操作, 就是对数据库进行增, 删, 改, 查, 既然提到这个, 那么对于对象的属性操作也不例外, 基本上可以说也是这几个操作. JS中对象的属性标签 writable(可写), enumerable(可枚举), configurable(可配置), value(值), get/set(get, set方法). 这几个标签会在后面逐渐丰富, 这里先简单介绍下. 属性的读写 属性的读写在介绍对象的时候基本已经说的差不多了, 这里补充和总结一下. 这里

JavaScript对象获取属性的方法(.和[]方式)

js对象获取属性有两种方法:1.通过.的方式  2. 通过[]方式 // 通过.方式获取属性值,key是静态的 var aa = {name: "zhang", age: 18}; console.log(aa.name); // 通过[]获取属性值, key是动态的,可以是字符串,或者数字的形式 var bb = {"apple": 3, "pear": 2} var cc = {1: "number1", 2: "

JavaScript对象之属性操作

在js对象中,我们可以对对象属性进行操作. 上图的要点为:for-in会把原型链上的可枚举属性也列出来. 上图的要点为:可以使用逻辑运算符&&进行层层查找对象是否为undefined,从而在赋值过程中不报错. 上图的要点为: 1.delete不存在的属性,依旧返回true. 2.Object.getOwnPropertyDescriptor()是返回某个对象的描述对象,这有点像Java的反射类. 3.Object.prototype不可配置. 上图的要点为: 1.delete全局变量和局部

javascript 对象简单介绍(二)

JavaScript Array(数组) 对象数组对象的作用是:使用单独的变量名来存储一系列的值. 什么是数组?数组对象是使用单独的变量名来存储一系列的值.如果你有一组数据(例如:车名字),存在单独变量如下所示:var car1="Saab";var car2="Volvo";var car3="BMW";然而,如果你想从中找出某一辆车?并且不是3辆,而是300辆呢?这将不是一件容易的事!最好的方法就是用数组.数组可以用一个变量名存储所有的值,并

深入JavaScript对象创建的细节

最近深入学习javascript后,有个体会:面向对象的方式编程才是高效灵活的编程,也是现在唯一可以让代码更加健壮的编程方式.如果我们抛开那些玄乎的抽象出类等等思想,我自己对面向对象的从写程序的角度理解就是:复用和封装.复用具体就是让你尽量少写重复代码,封装就是将一些耦合度很高的逻辑放到一个程序块里,而且尽量让里面内容不受外界影响.最后的结论是:优秀的javascript代码都是面向对象的.定州市科技工业局 如何构建javascript对象?ECMA-262对对象的定义是:无序属性的集合,其属性