JS创建对象
2015-10-25 15:12
429 查看
本人常用的创建对象的方式,仅供参考,欢迎吐槽,谢谢!
创建对象
1、对象字面量,即使用大括号,如下:
2、构造函数
一种错误:
解决方案
3、原型模式
备注:当删除对象的属性时,为啥从该对象的name,从狗熊变成了猫咪了呢?这是跟JS中属性的查找有关!首先其先从该对象的属性中查找若有,则立即返回,当没有,再到其原型中查找,若有则立即返回,最后当找不到时,则返回undefined
什么是原型?
1、我们创建的每一个函数都有一个prototype属性,这个属性是一个对象,它的用途是包含有特定类型的所有实例共享的属性和方法。
2、只要创建了一个新函数,就会为该函数创建一个prototype属性。默认情况下,所有prototype属性都会自动获得一个constructor属性,这个属性包含一个指向prototype属性所在函数的指针。这样,函数以及函数原型之间就形成了循环指向了。
3、每当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(一般指__proto__),指向构造函数的原型属性。
参考资料:
有图的,很有意思:http://www.cnblogs.com/maxupeng/archive/2010/12/28/1918480.html
创建对象
1、对象字面量,即使用大括号,如下:
(function(){ var obj = { id: 1, desc: '创建对象测试开始啦!', show: function(){ console.log("id=%d, desc=%s", this.id, this.desc); } }; obj.show(); })();
2、构造函数
(function(){ function Animal(name, age){ this.name = name; this.age = age; this.show = function(){ console.log("该动物是%s,今年%d岁", this.name, this.age); } } var cat = new Animal('猫咪', 3); cat.show(); })();
一种错误:
(function(){ function Animal(){ } Animal.prototype.name = '猫咪'; Animal.prototype.age = 3; Animal.prototype.show = function(){ console.log("该动物是%s,今年%d岁", this.name, this.age); }; animal = Animal(); animal.show();//TypeError: animal is undefined })();
解决方案
(function(){ function Animal(){ if( !(this instanceof Animal) ){ return new Animal(); } } Animal.prototype.name = '猫咪'; Animal.prototype.age = 3; Animal.prototype.show = function(){ console.log("该动物是%s,今年%d岁", this.name, this.age); }; animal = Animal(); animal.show();//该动物是猫咪,今年3岁 })();
3、原型模式
(function(){ function Animal(){ } Animal.prototype.name = '猫咪'; Animal.prototype.age = 3; Animal.prototype.show = function(){ console.log("该动物是%s,今年%d岁", this.name, this.age); }; var animal = new Animal(); animal.show();//该动物是猫咪,今年3岁 animal.name = "狗熊"; animal.age = 14; animal.show();//该动物是狗熊,今年14岁 delete animal.name; animal.show();//该动物是猫咪,今年14岁 })();
备注:当删除对象的属性时,为啥从该对象的name,从狗熊变成了猫咪了呢?这是跟JS中属性的查找有关!首先其先从该对象的属性中查找若有,则立即返回,当没有,再到其原型中查找,若有则立即返回,最后当找不到时,则返回undefined
什么是原型?
1、我们创建的每一个函数都有一个prototype属性,这个属性是一个对象,它的用途是包含有特定类型的所有实例共享的属性和方法。
2、只要创建了一个新函数,就会为该函数创建一个prototype属性。默认情况下,所有prototype属性都会自动获得一个constructor属性,这个属性包含一个指向prototype属性所在函数的指针。这样,函数以及函数原型之间就形成了循环指向了。
3、每当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(一般指__proto__),指向构造函数的原型属性。
参考资料:
有图的,很有意思:http://www.cnblogs.com/maxupeng/archive/2010/12/28/1918480.html
相关文章推荐
- JavaScript编程中布尔对象的基本使用
- 举例讲解JavaScript中将数组元素转换为字符串的方法
- 总结js中数据类型的bool值及其比较
- 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码
- 一个由proguard与fastJson引起的血案
- POJ 2253 Frogger(floyd 或 dijstra)
- 理解JavaScript的闭包
- javascript,隔行变色,鼠标移入时高亮
- javascript学习笔记整理(概述、变量、数据类型简介)
- 绝对好用的浏览器json解析网址
- JSdome节点常用部分和事件内容
- js验证身份证号,超准确
- 201510251025_《Javascript权威指南(第六版)——用正则模式匹配、》(P252-)
- javascript基本语法 4 引用类型-----仿Java中的map操作
- 用Javascript进行简单的Table点击排序.
- JavaScript 执行覆盖测试分析
- javascript类的创建方法详解
- JS 获取滚动条位置
- js实现文本框文本域光标处插入图片文本的插件(并且光标在插入内容的内容后显示)
- jstl