js之oop <一> 创建对象,构造器(class)
js中除了基本类型,就是对象。可以说在js中处处皆对象。
由于js是弱语言,在编写的过程中很容易混淆 object 和 class 也就是对象和构造器。
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)的更多相关文章
- 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装
接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...
- JS中OOP之模拟封装和继承和this指向详解
大家好,今天我带大家学习一下js的OOP, 大家都知道,面向对象有三个基本特征,继承,封装和多态,面向对象的语言有那么几种,C++,PHP,JAVA等,而功能强大的JS可以模拟实现面向对象的两大特征, ...
- js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法:
js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法: var s = new MyString('hello'); s.length; s[0]; // " ...
- js中OOP小指南
js中OOP小指南 在指南中,我将尝试解析以面向对象规范聚焦的es6的新特性. 首先, 什么是设计模式 范例是某个事务的例子或模型,在某种情况下,按照一种模式创建了计算机程序. 什么是面向对象 显然你 ...
- js中json法创建对象(json里面的:相当于js里面的=)
js中json法创建对象(json里面的:相当于js里面的=) 一.总结 json里面的:相当于js里面的= 4.json创建js对象解决命名冲突:多个人为同一个页面写js的话,命名冲突就有可能发生, ...
- JS高级---三种创建对象的方式
JS高级---三种创建对象的方式 字面量的方式 (实例对象) 调用系统的构造函数 自定义构造函数方式 //创建对象---->实例化一个对象,的同时对属性进行初始化 var per=new Per ...
- 关于Js OOP编程 创建对象的一些理解。
面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物. 对象的含义 对象可以是汽车,人,动物,文字,表单或者任何存在的事物等等. 对象有: 属性----- ...
- js之oop <二> 对象属性
js中对象属性可以动态添加和删除.删除对象属性用delete关键字. function obj(){ } var oo = new obj(); oo.a = "a"; oo.b ...
- js面向对象oop编程
理解对象 对象这个词如雷贯耳,同样出名的一句话:XXX语言中一切皆为对象! 对象究竟是什么?什么叫面向对象编程? 对象(object),台湾译作物件,是面向对象(Object Oriented)中的术 ...
随机推荐
- asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结
通常javascript代码可以与HTML标签一起直接放在前 端页面中,但如果JS代码多的话一方面不利于维护,另一方面也对搜索引擎不友好,因为页面因此而变得臃肿:所以一般有良好开发习惯的程序员都会把 ...
- sharepint 数据视图 添加超链接
1. 数值域清除数值,输入文本 详细进度 2. 添加连接 到 哪个页面 3. 将inteid拖过来 4. 连接到项目显示表单 5. 直接改下面的连接地址 <a href="http:/ ...
- python实现删除文件与目录的方法
os.remove(path) 删除文件 path. 如果path是一个目录, 抛出 OSError错误.如果要删除目录,请使用rmdir().os.rmdir()只能删除空目录 remove() 同 ...
- B类地址
从 128.0.0.0 到 191.255.255.254 的单址广播 IP 地址.前两个八位字节指明网络,后两个八位字节指明网络上的主机.B类地址范围:128.0.0.1到191.255.255.2 ...
- 减少C++代码编译时间的方法
c++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人(也叫客户)使用的, 但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间,假如你做的工程比较大(比 ...
- oracle闪回查询
一.引言 程序中用到需要同步oracle更新和删除数据,于是考虑利用oracle的闪回查询机制来实现. 利用该机制首先需要oracle启用撤销表空间自动管理回滚信息,并根据实际情况设置对数据保存的有效 ...
- Spring声明式事务管理与配置详解
转载:http://www.cnblogs.com/hellojava/archive/2012/11/21/2780694.html 1.Spring声明式事务配置的五种方式 前段时间对Spring ...
- POJ Sky Code 莫比乌斯反演
N. Sky Code Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO for ...
- 2016 ACM/ICPC Asia Regional Qingdao Online HDU5878
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5878 解法:先保存,再二分查询~具体http://blog.csdn.net/coder_xia/arti ...
- MFC设置对话框大小
设置对话框大小不可改变 1.在类的头文件中加入函数申明 (.h文件) afx_msg void OnGetMinMaxInfo(MINMAXINFO *lpMMI); 2.在消息映射中添加 (.cpp ...