js中除了基本类型,就是对象。可以说在js中处处皆对象。

由于js是弱语言,在编写的过程中很容易混淆 objectclass 也就是对象构造器

object(对象):一般对象都由var关键字声明。

class(构造器):js中function除了声明函数,也可以声明构造器。故构造器是特殊的函数。

创建对象:

常见创建对象的方法有两种。

(1)对象字面量

var obj = { a:1, b:2 };  obj.a; //输出1

对象字面量创建的对象中也可以嵌套对象

var obj = { a:1, b:2, c:{ cx:3, cy:4 } }; obj.c.cx; //输出3

字面量构造对象函数

var obj = {
a:1,
b:2,
//创建对象函数
add(){
return this.a + this.b;
},
//函数重写
add(x,y){
return x + y;
}
};
obj.add(obj.a,obj.b); //输出3
obj.add(); //输出3

注意:的是对象字面量创建出的并不是class(类)而是object(对象),所以字面量创建的对象不可以当做class去new。

var obj = { a:1, b:2 };  var obj_o = new obj(); //报错

(2)构造器创建对象。(class new object)

构造器创建对象,首先创建构造器(class)。这和其他语言的class new object同理。

创建构造器:

1、function创建构造器

function obj(){ }; //构造器
var obj_1 = new obj(); //创建对象

js中function可以作为函数也可以作为构造器。

2、Constructor创建构造器

    function obj(){
this.name = "obj_name";
this.from = "obj_china";
this.say = function(){ console.log("my name is " + this._name + "I'm from " + this.from); }
} var obj_1 = new obj();
obj_1.say(); //输出“my name is undefinedI'm from obj_china”

Constructor创建构造器是用this关键字预先设定了一些属性和函数,以供class下的对象使用。

Constructor和工厂作用差不多,缺点就是每次创建一个对象就会调用一次工厂,浪费内存。

3、prototype创建构造器

    function obj(){}
obj.prototype._name = "obj_name";
obj.prototype.hobby = "obj_hobby";
obj.prototype.arr = new Array();
var obj_1 = new obj();
var obj_2 = new obj();
obj_1.arr.push("one");
obj_2.arr[0] //输出 one

缺点一旦修改原型属性,原型链上对象的属性都会被修改。

原型构造器,通过prototype定义一些属性和函数,通过原型构造器创建的每个对象都共用prototype定义的这些属性和函数。

js之oop <一> 创建对象,构造器(class)的更多相关文章

  1. 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

    接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...

  2. JS中OOP之模拟封装和继承和this指向详解

    大家好,今天我带大家学习一下js的OOP, 大家都知道,面向对象有三个基本特征,继承,封装和多态,面向对象的语言有那么几种,C++,PHP,JAVA等,而功能强大的JS可以模拟实现面向对象的两大特征, ...

  3. js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法:

    js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法: var s = new MyString('hello'); s.length; s[0]; // " ...

  4. js中OOP小指南

    js中OOP小指南 在指南中,我将尝试解析以面向对象规范聚焦的es6的新特性. 首先, 什么是设计模式 范例是某个事务的例子或模型,在某种情况下,按照一种模式创建了计算机程序. 什么是面向对象 显然你 ...

  5. js中json法创建对象(json里面的:相当于js里面的=)

    js中json法创建对象(json里面的:相当于js里面的=) 一.总结 json里面的:相当于js里面的= 4.json创建js对象解决命名冲突:多个人为同一个页面写js的话,命名冲突就有可能发生, ...

  6. JS高级---三种创建对象的方式

    JS高级---三种创建对象的方式 字面量的方式 (实例对象) 调用系统的构造函数 自定义构造函数方式 //创建对象---->实例化一个对象,的同时对属性进行初始化 var per=new Per ...

  7. 关于Js OOP编程 创建对象的一些理解。

    面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物. 对象的含义          对象可以是汽车,人,动物,文字,表单或者任何存在的事物等等. 对象有: 属性----- ...

  8. js之oop <二> 对象属性

    js中对象属性可以动态添加和删除.删除对象属性用delete关键字. function obj(){ } var oo = new obj(); oo.a = "a"; oo.b ...

  9. js面向对象oop编程

    理解对象 对象这个词如雷贯耳,同样出名的一句话:XXX语言中一切皆为对象! 对象究竟是什么?什么叫面向对象编程? 对象(object),台湾译作物件,是面向对象(Object Oriented)中的术 ...

随机推荐

  1. 提高PHP性能的实用方法+40个技巧优化您的PHP代码

    1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的"函数" ...

  2. 【转】MYSQL入门学习之九:索引的简单操作

    转载地址:http://www.2cto.com/database/201212/176772.html 一.创建索引  www.2cto.com           MYSQL常用的索引类型主要有以 ...

  3. SDUT 2413:n a^o7 !

    n a^o7 ! Time Limit: 1000MS Memory limit: 65536K 题目描述 All brave and intelligent fighters, next you w ...

  4. 关于BufferedWriter.write超过30W条数据写入过慢问题。

    原创文章,转载请注明出处! ------------------------------------------------------------ 今天接到一个项目需求变更,是关于从数据库查询到30 ...

  5. ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 A Simple Job

    描述 Institute of Computational Linguistics (ICL), Peking University is an interdisciplinary institute ...

  6. vs自带iis局域网调试

    http://www.cnblogs.com/liluping860122/p/4685564.html

  7. Android编译选项eng、user、userdebug的区别

    eng:debug 版本 user: release 版本 userDebug版本:部分debug版本 LOCAL_MODULE_TAGS := user eng optional test这个样子. ...

  8. linux中的shell脚本编程

    [1]shell脚本 1--- shell命令 2--- 控制语句(新的语法) (Shell命令的有序集合) [2]创建shell脚本文件 1--- 1.sh 2--- chmod 777 1.sh ...

  9. Wpf再次学习,分享给入门的朋友

    一.WPF介绍 先说下WPF,她的简称是Windows Presentation Foundation,注意到Presentation这个单词了吧,展现的意思,后面那个是基础,展现基础,WPF是一种展 ...

  10. drawRect导致内存暴增的真正原因

    那么现在我们分析一下drawRect导致内存暴增的真正原因: 重写drawRect为何会导致内存大量上涨? 要想搞明白这个问题,我们需要撸一撸在 iOS 程序上图形显示的原理.在 iOS 系统中所有显 ...