几类javascript常用的创建对象方法
JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。
一组包含数据的属性和对属性中包含数据进行操作的方法,称为对象。比如要设定网页的背景颜色,所针对的对象就是document,所用的属性名是bgcolor,如document.bgcolor="blue",就是表示使背景的颜色为蓝色。
JavaScript中的所有事物都是对象:字符串、数值、数组、函数此外,JavaScript允许自定义对象。所以javasript中的对象可以跟为内置对象和自定义对象两大类。javascript中的内置对象对于我们来说并不陌生,如Date(日期)对象、Array(数组)对象、Boolean(逻辑)对象、Global对象等。与之对应的是自定义对象的创建跟使用。在其他面向对象的语言中,对象的创建方式几乎都一致有一个统一的标准,然而由于javascript的灵活性,使得对象的定义跟创建都很灵活,没有统一的标准。正是由于没有标准,所以用起来稍不注意就会给代码带来隐患。
简单对象创建方式
- var Cat;
- Cat.name="tom";//添加属性并赋值
- Cat.age=2;
- Cat.sayHello=function(){
- alert("喵喵!");}
- Cat.sayHello();
工厂方式
- functionCreateCat(){
- var Cat=new object();
- Cat.name="Tom";//添加属性并赋值
- Cat.age=2;
- Cat.sayHello=function(){
- alert("喵喵!");
- }
- return Cat;
- }
- Cat.sayHello();//调用对象方法
每个对象都有自己的sayHello方法,所以开发者在此基础上有做了新的改进
- function say(){
- alert("喵喵!");
- }
- functionCreateCat(){
- var Cat=new object();
- Cat.name="Tom";//添加属性并赋值
- Cat.age=2;
- Cat.sayHello=say;
- return Cat;
- }
构造函数方式
- function Cat(name,age){
- this.name=name;//this当前对象
- this.age=age;
- this.sayHello=function(){
- alert("喵喵!");
- }
- }
- var cat =new Cat("Tom",5,);//实例化/创建对象
- cat.sayHello();//调用方法
缺点同最初工厂方法一样每个对象都有自己的方法或函数。
原型方式
- function Cat(){
- }
- Cat.prototype.name="Tom";
- Cat.prototype.sayHello=function(){
- alert("喵喵!");
- }
- var cat =new Cat();
- cat.sayHello();
原型方式实现了属性和函数的共享,解决了工厂及构造函数的不能共享函数的问题,同时也带来了新的问题。原型方式不能通过构造函数初始化属性,当属性是常量或函数时没有问题,当属性为对象时此时多个对象就会共享此属性即所有对象的此属性指针指向同一对象。
例
- function Cat(){
- }
- Cat.prototype.name="Tom";
- Cat.prototype.legs=newArray("leftfront","leftbehind","rightfront","rightbehind");
- Cat.prototype.sayHello=function(){
- alert("喵喵!");
- }
此时Cat类型所有对象的legs属性都共享一个数组对象。
混合模式(原型和构造函数)
- function Cat(name,age){
- this.name=name;
- this.age=age;
- }
- Cat.prototype.sayHello=function(){
- alert("喵喵!");
- }
- var cat =new Cat("Tom",27);
- cat.sayHello();
动态原型
- function Cat(name,age){
- this.name=name;
- this.age=age;
- if(typeofCat.initialized=="undefined"){
- Cat.prototype.sayHello=function(){
- alert("喵喵!");
- }
- Cat._initialized=true;
- }
- }
该方法使用标志(_initialized)来判断是否已给原型赋予了任何方法。该方法只创建并赋值一次,与传统的OOP语言,这样的代码更像其它面向对象语言中的定义。
总结
javascript自定义对象主要解决的就是在创建对象时保证属性和方法的创建,并且该类型的所有都象都不共享属性而必须保证该类型的所有对象必须共享函数或方法。目前使用最广泛的是混合的构造函数/原型方式。此外,动态原型方式也很流行,在功能上与构造函数/原型方式等价。不过不要单独使用构造函数或原型模式,因为这两种方式往往会给代码引入问题。
几类javascript常用的创建对象方法的更多相关文章
- php面向对象类中常用的魔术方法
php面向对象类中常用的魔术方法 1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct( ...
- JavaScript常用对象的方法和属性
---恢复内容开始--- 本文将简单介绍JavaScript中一些常用对象的属性和方法,以及几个有用的系统函数. 一.串方法 JavaScript有强大的串处理功能,有了这些串方法,才能编写出丰富多彩 ...
- JavaScript常用定义和方法
1.字符串一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串.toUpperCase()把一个字符串全部变为大写: var s = 'Hello'; s.toUpper ...
- JavaScript常用函数和方法
alert('Hello World!') //方法用于显示带有一条指定消息和一个 OK 按钮的警告框. //定义js函数 function Foo(name) { console.log(name) ...
- JavaScript常用标签和方法总结
什么是javascript? (1) JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的 脚本语言. (2) JavaScript是由Nets ...
- java网络编程ServerSocket类 和Socket类的常用构造方法及其方法
Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...
- Python 类的常用内置方法
类的内置方法(魔法方法): 凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,类的内置方法,会在满足某种条件下自动触发. 1.1__new__ __new__:在___init__触发前, ...
- javascript 常用array类型方法
concat:基于当前数组中的所有项创建一个新数据,会创建当前数组一个副本,然后将接受到的参数放到数组末尾,最后返回新数组.如果没有参数,则复制当前数组并返回副本. slice:基于当前数组中一个或多 ...
- JavaScript 常用数组函数方法专题
1. 由字符串生成数组 split() 分割字符串,并将分割的部分作为一个元素保存在一个新建的数组中. var str1 = "this is an emample to using the ...
随机推荐
- Qt ------ 判断运行在何种系统下
#ifdef Q_OS_WIN // Windows上的代码 #endif #ifdef Q_OS_LINUX // Linux上的代码 #endif #ifdef Q_OS_MAC // Mac上的 ...
- McNemar test麦克尼马尔检验
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- sourceTree的下载与安装
一. SourceTree是什么? 一个拥有可视化界面的项目版本控制的软件,适用于git项目管理,在window和mac均可使用. 二. SourceTree下载 下载地址:SourceTree官网 ...
- 2017 国庆湖南 Day3
期望得分:100+30+60=190 实际得分:10+0+55=65 到了233 2是奇数位 或223 第2个2是偶数位就会223 .233 循环 #include<cstdio> #de ...
- Python学习笔记(二十五)操作文件和目录
摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319253241 ...
- winform MDI子窗口闪动问题(本人测试100%有效解决闪屏问题)
将下面的代码随便放到主窗体的任何一个地方 protected override CreateParams CreateParams //解决MDI闪屏 { get { CreateParams cp ...
- 树形DP初探•总结
这几天,我自学了基础的树形DP,在此给大家分享一下我的心得. 首先,树形DP这种题主要就是解决有明确分层次且无环的树上动态规划的题.这种题型一般(注意只是基础.普通的情况下)用深度优先搜索来解决实 ...
- tensorflow.nn.bidirectional_dynamic_rnn()函数的用法
在分析Attention-over-attention源码过程中,对于tensorflow.nn.bidirectional_dynamic_rnn()函数的总结: 首先来看一下,函数: def bi ...
- Android Service使用简单介绍
作为一个android初学者,经常对service的使用感到困惑.今天结合Google API 对Service这四大组件之一,进行简单使用说明. 希望对和我一样的初学者有帮助,如有不对的地方,也希望 ...
- 利用PCA可视化异常点
异常点往往是由于某一个特征或者多个特征数值异常.但是对于多维度特征无法直接进行可视化观测异常点,利用PCA技术进行维度缩减,可以在二维或者三维空间上进行可视化展示. 原数据如下: from sklea ...