精华内容
下载资源
问答
  • 全局函数
    千次阅读
    2022-04-25 14:49:51

    1.base.js:

    // base.js
    exports.install = function(Vue, options) {
      Vue.prototype.text1 = function() {
        console.log('执行成功1');
      };
      Vue.prototype.text2 = function() {
        console.log('执行成功2');
      };
    };
     

    2.main.js:

    import Vue from 'vue'; // vue要在引文件之前
    import base from './base.js'; // 引用文件
    Vue.use(base); //将全局函数当做插件来进行注册
     

    3:组件引用:

    this.text1();
    this.text2();
     

    更多相关内容
  • JavaScript之全局函数详解

    万次阅读 多人点赞 2021-08-27 15:15:13
    JavaScript全局函数前言一、JavaScript全局函数有哪些?二、JavaScript全局函数详解?2.1.Eval()2.1.1.例子一2.1.2.例子二2.1.3.例子三(解析JSON字符串)2.1.3.1.eval解析函数:2.1.3.2.JSON字符串转换为对象的两种方法...


    前言

    今天在搬砖的时候页面上有个根据传过来的算法通过js全局函数eval()进行计算的js需求 属实有被恶心到 今天博主就整理下JavaScript的全局函数 防止以后再被这种问题使绊子 也希望对大家有所帮助

    一、JavaScript全局函数有哪些?

    函数描述
    decodeURI()解码某个编码的 URI。
    decodeURIComponent()解码一个编码的 URI 组件。
    encodeURI()把字符串编码为 URI。
    encodeURIComponent()把字符串编码为 URI 组件。
    escape()对字符串进行编码。
    eval()计算 JavaScript 字符串,并把它作为脚本代码来执行。
    isFinite()检查某个值是否为有穷大的数。
    isNaN()检查某个值是否是数字。
    Number()把对象的值转换为数字。
    parseFloat()解析一个字符串并返回一个浮点数。
    parseInt()解析一个字符串并返回一个整数。
    String()把对象的值转换为字符串。
    unescape()对由 escape() 编码的字符串进行解码。

    二、JavaScript全局函数详解?

    2.1.Eval()

    2.1.1.例子一

    首先看示例:

    eval("x=10;y=20;document.write(x*y)");
    document.write("<br>" + eval("2+2"));
    document.write("<br>" + eval(x+17));
    

    结果:

    200
    4
    27

    特殊用法{}:

    document.write("<br>" + eval{3+3}));
    

    这时返回结果为:6 我们发现{}这样使用和()其实是一样的 不同在于:

    //{}/2 这种写法是不支持的
    document.write("<br>" + eval{3+3}/2));
    //()是可以的
    document.write("<br>" + eval(3+3)/2));
    //若是{}也想进行此类计算也可以 如下:
    document.write("<br>" + eval{(3+3)/2}));
    

    2.1.2.例子二

    看一下在其他情况中,eval() 返回的结果:

    eval("2+3")    // 返回 5
    var myeval = eval;    // 可能会抛出 EvalError 异常
    myeval("2+3");    // 可能会抛出 EvalError 异常
    

    可以使用下面这段代码来检测 eval() 的参数是否合法:

    try  {
      alert("Result:" + eval(prompt("Enter an expression:","")));
    }catch(exception) {
      alert(exception);
    }
    

    2.1.3.例子三(解析JSON字符串)

    2.1.3.1.eval解析函数:

    JSON 不允许包含函数,但你可以将函数作为字符串存储,之后再将字符串转换为函数。

    var text = '{ "name":"Runoob", "alexa":"function () {return 10000;}", "site":"www.runoob.com"}';
    var obj = JSON.parse(text);
    obj.alexa = eval("(" + obj.alexa + ")");
     
    document.getElementById("demo").innerHTML = obj.name + " Alexa 排名:" + obj.alexa();
    

    2.1.3.2.JSON字符串转换为对象的两种方法

      //将JSON字符串转为JS对象的方法一
        var obj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }');
        document.write(obj.name + "<br/>");
        //将JSON字符串转为JS对象的方法二
        //JSON格式的字符串
        var test1 = '{"name":"qlq","age":25}';
        var obj2 = eval("(" + test1 + ")"); //必须带圆括号
        document.write(obj2.name + "<br/>" + obj2.age);
    

    结果:

    runoob
    qlq
    25

    为什么要 eval这里要添加 eval("(" + test1 + “)”)//”呢?

    原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

    加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将 括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

    alert(eval("{}"); // return undefined
    alert(eval("({})");// return object[Object]
    

    对于这种写法,在JS中,可以到处看到。

    如: (function()) {}(); 做闭包操作时等。

    alert(dataObj.root.length);//输出root的子对象数量
    $.each(dataObj.root,fucntion(idx,item){
    if(idx==0){
    return true;
    }
    //输出每个root子对象的名称和值
    alert("name:"+item.name+",value:"+item.value);
    })
    

    注:对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变。

    2.1.3.3.对于服务器返回的JSON字符串,如果jquery异步请求将 type(一般为这个配置属性)设为"json",或者利 用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法:

    $.getJSON("http://www.phpzixue.cn/",{param:"gaoyusi"},function(data){
    //此处返回的data已经是json对象
    //以下其他操作同第一种情况
    $.each(data.root,function(idx,item){
    if(idx==0){
    return true;//同countinue,返回false同break
    }
    alert("name:"+item.name+",value:"+item.value);
    });
    });
    

    这里特别需要注意的是方式1中的eval()方法是动态执行其中字符串(可能是js脚本)的,这样很容易会造成系统的安全问题。所以可以采用一些规避了eval()的第三方客户端脚本库,比如JSON in JavaScript就提供了一个不超过3k的脚本库。

    2.1.3.4.补充:eval()解析的JSON的key可以不带""

    一般的JSON的key必须带双引号,也就是类似于{"key":"vslue"}的形式,但是如果用eval("("+json+")")的形式解析字符串为JSON的时候,json可以写为{key:"value"}

    2.2.decodeURI()与 decodeURIComponent() – 解码函数

    decodeURI() 可对 encodeURI() 函数编码过的 URI 进行解码

    如:

     const aaa = '#$ ¥%23ccc/'
      
      console.log(encodeURI(aaa));	// #$%20%EF%BF%A5%2523ccc/
      console.log(decodeURI(aaa));	// #$ ¥%23ccc/
      console.log(encodeURIComponent(aaa));	// %23%24%20%EF%BF%A5%2523ccc%2F
      console.log(decodeURIComponent(aaa));	// #$ ¥#ccc/
    

    我们在获取地址栏参数是通常封装成如下函数:

    export function getQueryObject(url) {
      url = url || window.location.href
      const search = url.substring(url.lastIndexOf('?') + 1)
      const obj = {}
      const reg = /([^?&=]+)=([^?&=]*)/g
      search.replace(reg, (rs, $1, $2) => {
        const name = decodeURIComponent($1)
        let val = decodeURIComponent($2)
        val = String(val)
        obj[name] = val
        return rs
      })
      return obj
    }
    

    2.3.encodeURI()与encodeURIComponent() — 编码函数

    encodeURI():
    语法

    encodeURI(URIstring)
    参数 描述
    URIstring 必需。一个字符串,含有 URI 或其他要编码的文本。
    返回值
    URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
    说明
    该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。
    该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?: @&=+$,#

    encodeURIComponent() :

    语法
    encodeURIComponent(URIstring)
    参数 描述
    URIstring 必需。一个字符串,含有 URI 组件或其他要编码的文本。
    返回值
    URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
    说明
    该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。
    其他字符(比如 :;/?😡&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
    提示和注释
    提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

    enCodeURI示例:

    <html>
    <body>
    
    <script type="text/javascript">
    
    document.write(encodeURI("http://www.w3school.com.cn")+ "<br />")
    document.write(encodeURI("http://www.w3school.com.cn/My first/")+ "<br />")
    document.write(encodeURI(",/?:@&=+$#"))
    
    </script>
    
    </body>
    </html>
    

    输出结果:

    http://www.w3school.com.cn
    http://www.w3school.com.cn/My%20first/
    ,/?: @&=+$#

    对整个URL进行编码,而URL的特定标识符不会被转码。

    encodeURIComponent() 示例:

    <script type="text/javascript">
    
    document.write(encodeURIComponent("http://www.w3school.com.cn"))
    document.write("<br />")
    document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))
    document.write("<br />")
    document.write(encodeURIComponent(",/?:@&=+$#"))
    
    </script>
    

    输出结果:

    http%3A%2F%2Fwww.w3school.com.cn
    http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F
    %2C%2F%3F%3A%40%26%3D%2B%24%23

    对URL中的参数进行编码,因为参数也是一个URL,如果不编码会影响整个URL的跳转。

    2.4.escape()

    语法
    escape(string)
    参数 描述
    string 必需。要被转义或编码的字符串。
    返回值
    已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。

    说明
    该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
    注意:ECMAScript v3 反对使用该方法,应用使用 decodeURI()decodeURIComponent() 替代它。

    示例:

    <script type="text/javascript">
    
    document.write(escape("Visit W3School!") + "<br />")
    document.write(escape("?!=()#%&"))
    
    </script>
    

    结果:

    Visit%20W3School%21
    %3F%21%3D%28%29%23%25%26

    2.5.isFinite()

    它的作用就是用来判断参数是否位于最小值和最大值之间,如果位于之间就会返回true,否则就会返回false。
    在ECMAScript中能够表示的最小的数值保存在Number.MIN_VALUE中,在大多数浏览器中这个值是:5e-324;能够表示的最大的数值保存在Number.MAX_VALUE中,在大多数浏览器中,这个值是1.7976931348623157e+308,如果数值超出了范围,该值就会自动转换为一个特殊值infinity,正数的话前面会是Infinity,如果是负数的话会转换为-Infinity

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<script type="text/javascript">
    		var num = 1123;
    		alert(num);//1123
    		var num1 = Number.MAX_VALUE+Number.MAX_VALUE;
    		alert(num1);//Infinity
    		alert(isFinite(num));//true
    		alert(isFinite(num1));//false
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    

    可以用来判断该值是否在正常的数值范围内

    2.6.isNaN()

    定义和用法
    isNaN() 函数用于检查其参数是否是非数字值。

    isNaN的用法:检测当前值是否不是有效数字,返回true代表不是有效数字,返回false是有效数字

    //=>语法:isNaN([value])
    var num=12;
    isNaN(num); //->检测num变量存储的值是否为非有效数字 false
    
    isNaN('13') =>false
    isNaN('你好呀') =>true
    isNaN(true) =>false
    isNaN(false) =>false
    isNaN(null) =>false
    isNaN(undefined) =>true
    isNaN({age:9}) =>true
    isNaN([12,23]) =>true
    isNaN([12]) =>false
    isNaN(/^$/) =>true
    isNaN(function(){}) =>true
    

    2.6.1.isNaN检测的机制:首先验证当前要检测的值是否为数字类型的,如果不是,浏览器会默认的把值转换为数字类型

    [字符串转数字]
    Number('13') ->13
    Number('13px') ->NaN 如果当前字符串中出现任意一个非有效数字字符,结果则为NaN
    Number('13.5') ->13.5 可以识别小数
    [布尔转数字]
    Number(true) ->1
    Number(false) ->0
    [其它]
    Number(null) ->0
    Number(undefined) ->NaN
    

    把引用数据类型值转换为数字:先把引用值调取toString转换为字符串,然后再把字符串调取Number转换为数字

    2.6.2.当前检测的值已经是数字类型,是有效数字返回false,不是返回true(数字类型中只有NaN不是有效数字,其余都是有效数字)

    parseInt / parseFloat等同于Number,也是为了把其它类型的值转换为数字类型
    和Number的区别在于字符串转换分析上

    Number:出现任意非有效数字字符,结果就是NaN
    parseInt:把一个字符串中的整数部分解析出来,parseFloat是把一个字符串中小数(浮点数)部分解析出来

    parseInt('13.5px') =>13
    parseFloat('13.5px') =>13.5
    parseInt('width:13.5px') =>NaN 
    

    从字符串最左边字符开始查找有效数字字符,并且转换为数字,但是一但遇到一个非有效数字字符,查找结束
    因此,使用isNaN之前,最好判断一下数据类型。

    function myIsNaN(value) {
      return typeof value === 'number' && isNaN(value);
    }
    

    判断NaN更可靠的方法是,利用NaN为唯一不等于自身的值的这个特点,进行判断。

    function myIsNaN(value) {
      return value !== value;
    }
    

    2.7.Number()

    Number(obj)为全局函数,不依托于任何对象,用于将参数对象的值转为数值
    例如:

    var test1= new Boolean(true);
    var test2= new Boolean(false);
    var test3= new Date();
    var test4= new String("999");
    var test5= new String("999 888");
    
    document.write(Number(test1)); 输出 1
    document.write(Number(test2)); 输出 0
    document.write(Number(test3)); 输出 1256657776588
    document.write(Number(test4)); 输出 999
    document.write(Number(test5)); 输出 NaN
    

    1.参数为string

    var a="3.14159";
    
    var a2=Number(a);//结果为3.14159
    

    2.参数为数值

    var b=3.14159
    
    var b2=Number(b);//结果为3.14159
    

    2.8.parseInt()与parseFloat()

    1.parseInt()

    parseInt() 函数可解析一个字符串,并返回一个整数。开头和结尾的空格是允许的。如果参数是一个数字,那么该方法将去掉小数部分,并且返回整数部分。

    例如:

    parseInt(3.14159);//3  参数为数值
    parseInt("3.14159");//3   参数为字符串
    

    2.parseFloat()

    函数可解析一个字符串,并返回一个浮点数。参数可以为数字,如果参数为小数数字,返回小数数字,如果为整数数字,返回整数数字

    例如:

    parseFloat(3.14159)//3.14159
    parseFloat("3.14159")//3.14159
    parseFloat(5)//5
    parseFloat("5");//5
    

    2.9.string() — 与toString()同

    把不同的对象转换为字符串:

    <script>
    
    var test1 = new Boolean(1);
    var test2 = new Boolean(0);
    var test3 = new Boolean(true);
    var test4 = new Boolean(false);
    var test5 = new Date();
    var test6 = new String("999 888");
    var test7 = 12345;
    
    document.write(String(test1)+ "<br>");
    document.write(String(test2)+ "<br>");
    document.write(String(test3)+ "<br>");
    document.write(String(test4)+ "<br>");
    document.write(String(test5)+ "<br>");
    document.write(String(test6)+ "<br>");
    document.write(String(test7)+ "<br>");
    
    </script>
    

    以上实例输出结果:

    true
    false
    true
    false
    Fri Aug 27 2021 16:31:26 GMT+0800 (中国标准时间)
    999 888
    12345

    2.10.unescape()

    功能描述:可对通过 escape() 编码的字符串进行解码。该函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),
    用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。
    温馨提示:ECMAScript v3 已从标准中删除了 unescape() 函数,并反对使用它,因此应该用 decodeURI() 和 decodeURIComponent() 取而代之。

    示例:

    var str="Need tips? Visit RUNOOB!";
    var str_esc=escape(str);
    document.write(str_esc + "<br>")
    document.write(unescape(str_esc))
    
    展开全文
  • uniapp全局变量和全局函数的实现

    千次阅读 2021-10-27 14:44:16
    uniapp全局变量和全局函数的实现前言通用模块实现使用优缺点原型(prototype)实现使用优缺点globalData实现使用优缺点Vuex实现使用优缺点尾巴 前言 在开发过程中,为了尽量消除冗余代码我们往往会将一些通用的变量...

    前言

    在开发过程中,为了尽量消除冗余代码我们往往会将一些通用的变量、方法或者函数进行抽象以便进行复用,比如baseurl,通用的工具函数等等。接下来就总结下uniapp中常用的几种实现全局变量和全局函数的方法。

    通用模块

    定义一个通用的模块(通常是js文件),然后在这个js文件中配置全局变量和全局函数,需要的地方引入这个文件即可。

    实现

    在 uni-app 项目根目录下创建 common 目录,然后在 common 目录下新建 common.js 用于定义全局变量和全局函数。
    在这里插入图片描述
    common.js定义如下:

    //定义全局变量
    const baseurl = 'http://test.com'
    const title = 'Hello World'
    //定义全局函数
    function init(){
    	console.log('init')
    }
    //导出
    module.exports = {
    	init,
    	baseurl,
    	title
    }
    

    使用

    在页面中<script>标签中引入common.js,然后在data中引入title,onload引入baseurl并调用init函数,页面中部分代码如下:

    <template>
    	<view class="content">
    		<image class="logo" src="/static/logo.png"></image>
    		<view class="text-area">
    			<text class="title">{{title}}</text>
    		</view>
    	</view>
    </template>
    
    <script>
    	import common from "../../common/js/common.js"
    	export default {
    		data() {
    			return {
    				title: common.title//data中引用
    			}
    		},
    		onLoad() {
    			console.log('baseurl : '+common.baseurl)
    			common.init()
    		},
    		methods: {}
    	}
    </script>
    //省略部分代码
    ...
    

    运行之后查看能正确打印:
    在这里插入图片描述
    页面显示结果也符合预期:

    在这里插入图片描述

    优缺点

    这种方式可以将项目中所有需要用到的全局变量和全局函数集中维护比较方便,但是缺点就是使用时每次都需要引入文件。

    原型(prototype)

    将一些通用的全局变量和全局函数挂载到Vue.prototype,然后在Vue文件中通过this来进行访问。

    实现

    在main.js中挂载公用属性和公用函数

    //省略部分代码
    ...
    Vue.prototype.$title = 'Hello World'
    Vue.prototype.$baseurl = 'http://test.com'
    Vue.prototype.$init = function () {  
    	console.log('init') 
    }
    //省略部分代码
    ...
    

    使用

    在data中引入title,onload引入baseurl并调用init函数,页面中部分代码如下:

    <template>
    	<view class="content">
    		<image class="logo" src="/static/logo.png"></image>
    		<view class="text-area">
    			<!--注意这里在APPH5中可以直接使用this.$title,微信小程序则不支持,以下为兼容性写法-->
    			<text class="title">{{title}}</text>
    		</view>
    	</view>
    </template>
    
    <script>
    	export default {
    		data() {
    			return {
    				title: this.$title
    			}
    		},
    		onLoad() {
    			console.log('baseurl : '+this.$baseurl)
    			this.$init()
    		},
    		methods: {}
    	}
    </script>
    //省略部分代码
    ...
    

    运行完结果图同上,就不展示了。

    优缺点

    优点是使用简单,直接将属性或者函数挂载到Vue.prototype,在vue页面中直接通过this.来访问,缺点是只支持vue,不支持nvue。

    globalData

    这种方式就和微信小程序中使用globalData差不多,uniapp中定义则是在App.vue中。

    实现

    App.vue中全局变量定义在globalData中,全局函数定义在methods中。

    <script>
    	export default {
    		onLaunch: function() {
    			console.log('App Launch')
    		},
    		onShow: function() {
    			console.log('App Show')
    		},
    		onHide: function() {
    			console.log('App Hide')
    		},
    		//全局变量
    		globalData: {
    			title: 'Hello World',
    			baseurl: 'http://test.com'
    		},
    		//全局函数
    		methods: {
    			init(){
    				console.log('init') 
    			}
    		}
    	}
    </script>
    
    <style>
    	/*每个页面公共css */
    </style>
    

    使用

    <template>
    	<view class="content">
    		<image class="logo" src="/static/logo.png"></image>
    		<view class="text-area">
    			<text class="title">{{title}}</text>
    		</view>
    	</view>
    </template>
    
    <script>
    	var app = getApp()
    	export default {
    		data() {
    			return {
    				title: app.globalData.title
    			}
    		},
    		onLoad() {
    			console.log('baseurl : '+app.globalData.baseurl)
    			app.init()
    		},
    		methods: {}
    	}
    </script>
    

    运行完结果图同上,就不展示了。

    优缺点

    优点是支持vue和nvue共享数据,对有微信小程序开发基础的人员更加友好,这也是一种比较简单的实现全局变量和全局函数的方式,暂时未发现明显缺点。

    Vuex

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

    实现

    在 uni-app 项目根目录下创建 store 目录,然后在 store 目录下新建 index.js 用于定义全局变量,如下所示:(这里不支持全局函数)

    import Vue from "vue"
    import Vuex from "vuex"
    Vue.use(Vuex)
    const store = new Vuex.Store({
    	state: {
    		//全局变量
    		baseurl: 'http://test.com',
    		title: 'Hello World'
    	},
    	//同步修改 state 中值的方法
    	mutations: {
    		//provider使用户在使用mutations是传入的参数,可以使单一值也可以是对象
    		modifyTitle(state, provider) {
    			state.title = provider.title
    		}
    	}
    })
    export default store
    
    

    使用

    在main.js中引入

    //省略部分代码
    ...
    import store from '@/store'//新加行
    //省略部分代码
    ...
    const app = new Vue({
    	store,//新加行
        ...App
    })
    //省略部分代码
    ...
    

    再页面中使用

    <template>
    	<view class="content">
    		<image class="logo" src="/static/logo.png"></image>
    		<view class="text-area">
    			<text class="title" @click="tap">{{title}}</text>
    		</view>
    	</view>
    </template>
    
    <script>
    	import {mapState, mapMutations} from 'vuex';
    	export default {
    		data() {
    			return {}
    		},
    		onLoad() {
    			console.log('baseurl : '+this.baseurl)
    		},
    		//计算属性中获取值,这里很重要
    		computed: { 
    		 ...mapState(['baseurl']),
    		 ...mapState(['title'])
    		},
    		methods: {
    			//这里也要定义,否则tap中的事件无法响应
    			...mapMutations(['modifyTitle']),
    			//tap事件改变store中的title值
    			tap(){
    				this.modifyTitle({title: '你好,世界'})
    			}
    		}
    	}
    </script>
    

    运行之后查看能正确打印:
    在这里插入图片描述
    然后我们看下tap事件
    请添加图片描述
    可以看到当点击title那个view的时候,界面上的显示自动变化了,结果符合预期。

    优缺点

    优点是值修改是响应式(一个地方修改,其他引用到的地方值都会响应进行变化)这是以上三种方式不具备的优点,缺点是使用稍微繁琐点,且不支持全局函数。

    尾巴

    目前uniapp实现全局变量和全局函数大概就这些,文章中将具体的实现方式和优缺点都进行了展示,可以按自己需求来选择使用哪种方式。

    老规矩,喜欢我的文章,欢迎给我点赞,评论,关注,谢谢大家!

    展开全文
  • C++学习之全局函数和成员函数

    千次阅读 2019-09-16 15:46:48
    1.把全局函数转化成成员函数 通过this指针隐藏左操作数 Test add(Test &t1, Test &t2)===》Test add(Test &t2) 案例:实现 t1 = t1 + t2 class Test { public: Test(int a = 0,...

    1.把全局函数转化成成员函数

    • 少了一个参数
    • 通过this指针隐藏左操作数
    • Test add(Test &t1, Test &t2)===》Test add(Test &t2)

    2.把成员函数转换成全局函数

    • 多了一个参数
    • void printAB()===》void printAB(Test *pthis)

    3.函数返回元素和返回引用


    • 案例:实现 t1 = t1 + t2
    class Test
    {
    public:
    	Test(int a = 0, b = 0)
    	{
    		this->a = a;
    		this->b = b;
    	}
    public:
    	//成员函数方法
    	Test TestAdd(Test & t2)		//函数返回元素
    	{
    		Test tmp(this->a + t2.a, this->b + t2.b);
    		return tmp;
    	}
    
    	//t1.TestAdd2(t2);
    	 //返回一个引用 相当于返回自身
    	 //返回t1这个元素,所以this就是 &t1
    	 TestClass & TestAdd2(TestClass &t2) //*this 函数返回引用
    	 { 
    		  this->a = this->a + t2.a;
    		  this->b = this->b + t2.b;
    		  return *this;  //把 *(&t1) 又回到了t1元素
    		    		 // *操作让this指针 回到元素状态
    	 }	
    public:
     void printT()
     {
      	cout << "a:" << a << " b:" << b << endl;
     }
    
    public:	
    	int a, b;
    }
    //成员函数转成 全局函数  多了一个参数
    void printT(TestClass *pT)
    {
     cout << "a:" << pT->a << " b:" << pT->b << endl;
    }
    //全局函数的方法实现 t1+t2
    //全局函数 转成 成员函数 少了一个参数
    Test TestAdd(Test &t1, Test &t2)
    {
    	Test tmp;
    	return tmp;
    }
    void main()
    {	
    	Test t1(1,2);
    	Test t2(3,4);
    	//t1+t2
    	
    	//全局函数方法
    	Test t3;
    	t3 = TestAdd(t1,t2);
    	
    	//成员函数方法
    	{
    		//先把测试案例写出来
      		TestClass t4 = t1.TestAdd(t2); //匿名对象(t1+t2)直接转化成t4 
      		t4.printT();
      		
    		TestClass t5;
    		t5 = t1.TestAdd(t2);   //匿名对象 赋值给t5
    		t5.printT();
    	}
    	system("pause");
    	 /*
    	 a:0 b:0  析构函数
    	 a:0 b:0  析构函数
    	 a:4 b:6  析构函数
    	 a:4 b:6
    	 a:4 b:6  析构函数
    	 a:4 b:6  析构函数
    	 a:4 b:6
    	 a:4 b:6  析构函数
    	 a:4 b:6  析构函数
    	 请按任意键继续. . .
    	 */
    	
    }
    	
    //返回引用
    void main03()
    {
    	 TestClass t1(1, 2);
    	 TestClass t2(3, 4);
     
    	 //t1 = t1 + t2
    	 t1.TestAdd2(t2);
    	 t1.printT();
    	 system("pause");
    	 /*
    	 a:4 b:6
    	 请按任意键继续. . .
    	 */
    }
    展开全文
  • Python——全局函数

    千次阅读 2020-11-02 17:22:58
    全局变量在函数中的使用 全局变量(global variable):定义在py文件中,可以在该模块定义后任何地方都可以访问 1、是函数外部定义的变量(没有定义某一个函数内,所有函数都可以使用这个变量) 2、在函数内部...
  • 如何在Python中定义全局函数

    千次阅读 2020-11-20 23:10:41
    函数将添加到当前命名空间,就像添加任何其他名称一样.这意味着您可以在函数或方法中使用global关键字:def create_global_function():global foodef foo(): return 'bar'这同样适用于类体或方法:class ...
  • 全局函数

    千次阅读 2019-09-17 22:32:08
    全局函数 Abs 去绝对值(返回参数的绝对值) All 参数是一个列表。只要有一个是假。则全是假 如果有一个是真则为真 Any 与all 相反 Eval 将对应的字符串转化为对应的脚本(去掉字符串的作业)去掉...
  • JavaScript全局函数有哪些?

    千次阅读 2020-07-09 11:29:02
    1、decodeURI():解码某个编码的URI 2、decodeURIComponent():解码一个编码的URI组件 3、encodeURI():把字符串编码为URI 4、encodeURIComponent():把字符串编码为URI组件 5、escape():对字符串进行编码 ...
  • 在vue项目中 如何定义全局变量 全局函数 如题,在项目中,经常有些函数和变量是需要复用,比如说网站服务器地址,从后台拿到的:用户的登录token,用户的地址信息等,这时候就需要设置一波全局变量和全局函数 定义...
  • 1、首先,我们要明确成员函数与全局函数的区别 ***简单来说,全局变量可以在整个程序里使用;而局部变量只可以在一个函数或一段代码中使用。 (1)类成员函数是面向对象,全局函数是面向过程 (2)类成员函数 =&...
  • 全局函数类内和类外实现

    千次阅读 多人点赞 2020-05-17 10:13:19
    全局函数类内实现:直接在类内声明友元即可 全局函数类外实现:需要让编译器提前知道全局函数的存在 推荐使用全局函数类内实现,编译器可以直接识别 #include #include using namespace std; //声明Person类 ...
  • C++中将运算符重载为全局函数

    千次阅读 2019-04-10 08:46:04
    1.将运算符重载为全局函数时,形参中至少要有一个为自定义的数据类型,即不能全为基本数据类型; 2.注意运用friend关键字可将非成员函数定义为某个类的友元,此时,该函数便可访问该类的私有成员变量了。 /*--------...
  • 在ts里面写了一个全局函数 declare class Animal { constructor(name: string); sayHi(): string; } let cat = new Animal('Tom'); 但编译成js后成: var cat = new Animal('Tom'); 运行js时报错:...
  • C++中全局函数和局部函数的关系

    万次阅读 2017-12-09 17:10:00
    #include using namespace std; //面向对象的模型-全局函数成员函数class Test { public: int a; int b; public: Test(int a=0,int b=0) { this->a = a; this->b = b; } Test T
  • 一:创建小程序全局函数 1:在微信开发工具中增加一个JS文档, 放入全局全局函数 代码说明 1:全局函数只能放var定义的变量下,本例的var 变量为myFunction 格式为: var myFunction={ 在这里编写你的全局函数 } 你...
  • javascript的全局函数

    千次阅读 2019-04-03 09:09:04
    JavaScript中只有global全局对象,并没有window全局对象,window对象是浏览器厂商实现的。
  • 除了vue编写全局变量全局方法(参考 [https://www.cnblogs.com/conglvse/p/10062449.html],https://zhuanlan.zhihu.com/p/110640949,(https://www.cnblogs.com/conglvse/p/10062449.html))外还有,可以在App.vue...
  • laravel5.5 配置全局函数

    千次阅读 2018-12-15 18:04:23
    根据个人习惯,我喜欢把全局函数放在app下。一般项目都有验证。所以,我把状态函数和验证分开了(看个人习惯)。这里,我在app下创建了一个文件夹:Helper 然后,我们需要在composer.json文件中添加两个文...
  • 例子 //全局 friend Complex operator+(const Complex &c1, const Complex &c2); //成员,记得加=号,“+=” ...对于全局函数形式的重载“+” 先来看b = a + 1.1;,实际上会被转换为b = operator+(...
  • nuxt如何使用全局变量和全局函数

    千次阅读 2020-12-20 15:59:00
    参考文章: ...因为这个和vue-cil不一样,没有index.js.所以需要我们把内容加到plugins文件夹里面 我们到这里文件夹下新建一个global.js文件。里面写上下面的内容: ...全局变量也超级简单(可以直接放在一起的) ...
  • angular定义全局函数

    千次阅读 2019-05-30 09:44:48
    scope是angularJS中的作用域(其实就是存储数据的地方),很类似...这就是$rootScope最大的作用,相当于定义公共的函数和变量,不过一般定义公共的函数,我们还是建议使用服务。 结合网站各种资料整理,感谢。
  • 艺赛旗(RPA)对于全局函数的理解

    千次阅读 2019-03-18 13:40:11
    全局函数组件的使用参考这个: 关于 全局函数 组件的使用及 函数返回值 接收问题 所谓全局函数其实就是项目文件中 codes 文件夹内一个名字叫 GlobalFun 的.py 文件,然后在流程设计代码中的最开头生成了一句 import ...
  • js全局函数和局部函数

    千次阅读 2018-09-04 14:06:01
    js和别的语言稍有不同。 js只有在函数内的变量叫做局部变量 其余都是全局变量(包括只有一对花括号这种情况,如下:) { var num=10; } console.log(num); num可以正常打印...
  • 写在前面:如题,在项目中,经常有些函数和变量是需要复用,比如说网站服务器地址,从后台拿到的:用户的登录token,用户的地址信息等,这时候就需要设置一波全局变量和全局函数,这两个设置不太难,而且有一些共通之...
  • app.config.globalProperties.$http = () => {} 过滤器 在Vue3 移除了 我们正好可以使用全局函数代替Filters 案例 app.config.globalProperties.$filters = { format(str: T): string { return `$${str}` } } 声明...
  • vue 定义全局函数

    千次阅读 2018-05-15 09:57:00
    方法一:main.js 注入(1)在main.js中写入函数123Vue.prototype.changeData = ...方法二:单独创建一个 .js 文件,用于存放常用函数,并全局引用(1)写好自己需要的base.js文件12345exports.install = func...
  • 我们经常会用到一些内置的全局函数如parseInt();parseFloat()等等,另外我们可以根据自己的业务需要编写自己的函数。 全局函数 全局对象描述 全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的...
  • typescript之导入全局函数和类

    千次阅读 2018-08-29 21:32:40
    如果要导出多个对象,把它们放在顶层里导出 export class SomeType { /* ... */ } export function someFunc() { /* ...... 导入时明确地列出导入的名字 ...import { SomeType, SomeFunc } from "...
  • vue项目中,定义并使用 全局变量,全局函数

    万次阅读 多人点赞 2018-08-15 17:15:36
    一、定义变量,并全局使用 原理: 1. 单独新建一个全局变量模块文件,模块中定义一些变量初始状态,用export default 暴露出去。 2. 在main.js中引入,并通过Vue.prototype挂载到vue实例上面。供其他模块文件...
  • js当中的全局函数

    千次阅读 2018-04-07 20:44:36
    一: js当中的全局函数:不属于任何的类。 parseFloat();将一个字符串型的数,转变为一个数值类型。(浮点型) parseInt() ;将一个字符串类型的数,转变成一个数值类型。(整型) eval("js"); 方法将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,352,597
精华内容 541,038
关键字:

全局函数

友情链接: lesson1_c-sharp.rar