前言:
var car = { "wheels":4, "engines":1, "seats":5 };
构造函数 通常使用大写字母开头,以便把自己和其他普通函数区别开。
下面便是一个 构造函数 了:
var Car = function() { this.wheels = 4; this.engines = 1; this.seats = 1; };
在 构造函数 中, this
指向被此 构造函数 创建出来的 对象 。
var myCar = new Car();
new
关键字 去调用构造函数。因为只有这样,Javascript才知道这是要去构造一个新 对象 ,并且把构造函数中的 this
指向这个新对象var obj = Object.create({ foo: 1 }, { // foo is an inherit property. bar: { value: 2 // bar is a non-enumerable property. }, baz: { value: 3, enumerable: true // baz is an own enumerable property. } });
1.2 属性类型
1.数据属性:数据属性包含一个数据值的位置,在这个位置可以读取和写入值.言下之意即,数据属性是可以直接通过对象.属性
的形式访问和赋值的。
var person = { name : "Nicholas" } //里面的name属性是数据属性
Object.defineProperty()方法接收三个参数,属性所在的对象,属性的名字和一个描述符对象。设置其中一个或多个值,可以修改对应的特性值。
通过 Object.defineProperty()
方法,可以创建数据属性(并设定其[[Enumerable]]等内部属性),也可以创建访问器属性(访问器属性仅包含 getter
和 setter
函数,当然这两个也不是必须的)。
2.访问器属性:允许用户在赋值或取值都经过预先设定的函数,从而实现内部属性的那一种特殊效果。
var book = { _year : 2004,//_year前面下划线是常用的记号,表示只能通过对象方法访问的属性 edition : 1 }; Object.defineProperty(book,"year",{ get : function () { return this._year; }, set : function (newValue) { if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } } });
book.year=2005;
alert(book.edition); // 2
上述中,book.year 是访问器属性。直接调用 book.year
,即调用了这个访问器属性中定义的 get
方法,返回 book._year
这个数据属性。如果给 book.year
赋值,就是调用了这个访问器属性中定义的 set
方法。
如果你不明确的指定某个特性的值,则它们会被赋一个默认值:
特性名称 | 默认值 |
[[Value]] | undefined |
[[Get]] | undefined |
[[Set]] | undefined |
[[Writable]] | false |
[[Enumerable]] | false |
[[Configurable]] | false |
这些默认值对于属性描述符尤其重要.
原文:http://www.cnblogs.com/kasmine/p/6411461.html