JS创建对象
本人常用的创建对象的方式,仅供参考,欢迎吐槽,谢谢!
创建对象
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
JS创建对象的更多相关文章
- JS创建对象篇
JS创建对象篇 Object构造函数创建 var person = new Object(); person.name = "Tom"; person.age = 10; pers ...
- 使用js创建对象
1.js创建关键字 //使用 New 关键字 function person(name,age){ this.name=name; this.age=age; } $(function(){ var ...
- javascript(js)创建对象的模式与继承的几种方式
1.js创建对象的几种方式 工厂模式 为什么会产生工厂模式,原因是使用同一个接口创建很多对象,会产生大量的重复代码,为了解决这个问题,产生了工厂模式. function createPerson(na ...
- JS 创建对象总结
狭义:new 构造函数. (注:在JS中创建对象只有一种方式,就是new 构造函数.其中字面量的方式是一种语法糖,本质仍然是new 构造函数) 广义:工厂模式(解决复杂度) 构造函数模式(解决复杂度, ...
- JS创建对象的方式有几种
相信但凡作为一个前端工程师,都被面试到过这个面试题目,HR考察的就是对oop思想的理解. 作为一个从后端转过来的怂逼,oop一直是心中的永远的痛啊. 这几天一直在通读js高级程序设计,重复理解js创建 ...
- JS 创建对象(常见的几种方法)
贴个代码先: function O(user,pwd){ //use constructor this.user=user; this.pwd=pwd; this.get=get; return th ...
- js 创建对象的多种方式
参考: javascript 高级程序设计第三版 工厂模式 12345678910 function (name) { var obj = new Object() obj.name = name o ...
- 基础2:js创建对象的多种方式
js创建对象的多种方式 1. 工厂模式 function createPerson(name) { var o = new Object() 0.name = name return o } var ...
- 浅谈 JS 创建对象的 8 种模式
1.Object 模式 var o1 = {};//字面量的表现形式 var o2 = new Object; var o3 = new Object(); var o4 = new Object(n ...
- JS创建对象、继承原型、ES6中class继承
面向对象编程:java中对象的两个基本概念:1.类:类是对象的模板,比如说Leader 这个是泛称领导,并不特指谁.2:实例:实例是根据类创建的对象,根据类Leader可以创建出很多实例:liyi,y ...
随机推荐
- javascript 逻辑运算符
javascript逻辑运算符 NOT(!) AND(&&) OR(||) NOT(!) 返回值的类型一定是Boolean值的 运算数也是Boolean值 返回值是:与相反的boole ...
- php 获取链接参数
private function getQuerystr($url,$key){ $res = ''; $a = strpos($url,'?'); if($ ...
- PHP实现链式操作的原理
在一个类中有多个方法,当你实例化这个类,并调用方法时只能一个一个调用,类似: db.php <?php class db{ public function where() { //code he ...
- C# 文件管理类 Directory
今天简单接触了一下C#的文件管理类,对类的大体功能做了简单的了解; 做项目用于判断文件是否存.在创建文件.删除文件较为常用:今天大体总结文件调取功能: public string GetFile() ...
- JS类库函数收集中....
实现string的substring方法 方法一:用charAt取出截取部分 String.prototype.mysubstring=function(beginIndex,endIndex){ v ...
- iOS多线程编程Part 2/3 - NSOperation
多线程编程Part 1介绍了NSThread以及NSRunLoop,这篇Blog介绍另一种并发编程技术:NSOPeration. NSOperation & NSOperationQueue ...
- phonegap ios插件开发及无限后台运行解决
1.首先开发插件:因为我的项目前需要所以要做(根据情况) 在项目的plugins文件中新建obj c文件.如 Demo,此时会产生出Demo.h和Demo.m两个文件. .h文件主要就是定义一些方法, ...
- Jboss wildfly add JDBC driver
Jboss wildfly 添加 JDBC driver 我这里使用的是 wildfly-8.0.0.Final 第一步: 首先在modules里面添加mysql的驱动包 例如:modules\sy ...
- iOS 进阶 第五天(0330)
0330 cell的一些常见属性 设置cell右边指示器的类型 设置cell右边指示器的view cell的backgroundView和selectedBackgroundView cell的bac ...
- 第二章 Spring MVC入门
2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...