关于JavaScript中几种创建对象的方式
2014-08-27 00:00
501 查看
摘要: 工厂模式;构造函数模式;原型模式。
//一些内容均出自 Nicholas C.Zakas《Professional JavaScript for Web Developers》 //创建对象方法一 var person = new Object(); person.name = "Nicholas"; person.sayName = function() { console.log(this.name); }; //创建对象方法二 var dog = { name: "Tom", age: 12, sayName: function() { console.log(this.name); } };//对象字面量创建对象 //创建对象方法三 function createPig(name, age, job) { var o = new Object(); o.name = name; o.age = 11; o.job = job; o.sayName = function() {console.log(this.name);}; return o; };//工厂模式 //创建对象方法四 function Mouse(name, age, job) { this.name = name; this.age = 11; this.job = job; this.sayName = function() {console.log(this.name);}; };//构造函数模式(函数名大写字母开头) //创建对象方法五: 原型模式 function Duck(){}; Duck.prototype.name = "Tang"; Duck.prototype.sayName = function() {console.log(this.name)}; var duck = new Duck(); /* 数据属性4个描述行为的特性:用来设置每个属性是否可删除、枚举 遍历、值修改 [[Configurable]]:能否通过delete删除属性 [[Enumerable]]:能否通过for-in循环返回属性 [[Writable]]:能否修改属性的值 [[Value]]包含这个属性的数据值 */ function DataPropertyModify() { var cat = {}; //三个参数:属性所在的对象、属性名、描述符对象[其属性是:以上4个特性] //configurable属性设置为false后不可再次修改 Object.defineProperty(cat, "name", { configurable: false, writable: false, value: "John" }); console.log(cat.name); cat.name = "Greg"; console.log(cat.name); }; /* 访问器属性 [[Configurable]]:能否通过delete删除属性 [[Enumerable]]:能否通过for-in循环返回属性 [[Get]]:读取属性时调用的函数 [[Set]]:写入属性时调用的函数 */ function constructorPropertyModify() { var computer = {}; var book = { //下划线表示只能通过对象方法访问的属性 _year: 2004, edition: 1 }; Object.defineProperty(book, "year", { get: function() { return this._year; },//只指定getter则该属性不能写 set: function(newValue) { if (newValue > 2004) { this._year = newValue; this.edition += newValue -2004; } } }); book.year = 2005; console.log(book.edition); Object.defineProperties(computer, { _year: {value: 2004}, edition: {value: 1}, year: { get: function(){return this._year}, set: function(newValue) { if (newValue > 2004) { this._year = newValue; this.edition += newValue&nb 7fe0 sp;-2004; } } }, }); computer.year = 2006; console.log(computer.edition); }; function hasPrototypeProperty(object, name) { return !object.hasOwnProperty(name) && (name in object); } domReady(function(){ //当做构造函数使用 var mouse = new Mouse("Tom", 2, "software"); mouse.sayName(); //作为普通函数调用 Mouse("Tom", 2, "software"); window.sayName(); //在另一个对象的作用域中调用 var mo = new Object(); Mouse.call(mo, "Kristen", 25, "Nurse"); mo.sayName(); console.log("开始"); person.sayName(); DataPropertyModify(); constructorPropertyModify(); });
相关文章推荐
- javascript创建对象的几种方式
- JavaScript 创建类/对象的几种方式
- javascript创建对象的几种方式
- JavaScript 创建类/对象的几种方式
- 我所了解的关于JavaScript定义类和对象的几种方式
- JavaScript 创建类/对象的几种方式
- JavaScript创建对象的几种方式
- 关于JavaScript定义类和对象的几种方式
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第30讲_类和对象细节_创建对象的几种方式_js对象内存分析_学习笔记_源代码图解_PPT文档整理
- JavaScript创建对象的几种方式
- JavaScript 创建类/对象的几种方式
- JavaScript 创建类/对象的几种方式 (经典)
- Javascript创建对象的几种方式
- JavaScript 创建类/对象的几种方式
- JavaScript对象创建的几种方式及使用方法
- javascript中创建对象的几种方式
- javascript中创建对象的几种方式
- JavaScript中常见的几种创建对象的方式:基于对象扩充属性和方法、基于工厂方式创建对象、基于构造函数和基于原型
- 关于JavaScript定义类和对象的几种方式
- javascript学习(十五):js中对象的常用的几种创建方式