本文继续讨论 this 指向 问题,今天讨论: 类中的this 0 1 类上下文 this 在 类 中的表现与在函数中类似,因为类本质上也是函数,但也有一些区别和注意事项。 如下图: 0 2 派生类 派生类中写构造函数必须在super,否则报错, 如下 class Father{ constructor() { this.age this.sex = '男'; super() } 正确代码如下: constructor() { super() this.sex = '男'; } 0 2 调用了Fahter 的constructor 2. 生成this ,绑定Father中的属性(相当于new Father) 3. 返回Son的实例(即this)
This指向与改变This指向 This 的指向 在 ES5 中,其实 this 的指向,始终坚持一个原理:this 永远指向最后调用它的那个对象。 所以 this 指向的也就是 window。 this 的指向并不是在创建的时候就可以确定的,在 es5 中,永远是this 永远指向最后调用它的那个对象。 改变 this 的指向 改变 this 的指向我总结有以下几种方法: 使用 ES6 的箭头函数 在函数内部使用 _this = this 使用 apply、call、bind new 实例化一个对象 例 ) // Cherry 这个例子中,在 func2 中,首先设置 var _this = this;,这里的 this 是调用 func2 的对象 a,为了防止在 func2 中的 setTimeout 我们将 this(指向变量 a) 赋值给一个变量 _this,这样,在 func2 中我们使用 _this 就是指向对象 a 了。
前言 我是歌谣 最好的种树是十年前 其次是现在 今天继续给大家带来的是this指向的讲解 环境配置 npm init -y yarn add vite -D 修改page.json配置端口 ){ this.d=3; var a=1; function c(){ } } Test(123) console.log(window.d) // 运行结 案例2
a,b) { console.log(this); console.log(a + b); } fn.call(o,1,2) thisArg:在 fun 函数运行时指定的 this 值 1. arg1,arg2:传递的其他参数 2.返回值就是函数的返回值,因为它就是调用函数 3.因此当我们想改变 this // 2.但是他的参数必须是数组(伪数组) // 3. apply的主要应用比如说我们可以利用apply 借助于数学内置对象求最大值 // Math.max console.log(this); console.log(a + b); } var f = fn.bind(o,1,2) ; f(); // console.log(arr); // 1.不会调用原来的函数可以改变原来函数内部的this 指向 // 2.返回的是原函数改变
source=cloudtencent this 指向分为两种情况,一种是普通函数中使用的 this,另外一种是箭头函数中的 this。 普通函数 this 指向调用者。 场景 2 const person = { sayHi: function () { console.log(this) } } person.sayHi() // person 这里的 this 指向 person,sayHi 是谁调用了? 场景 2 const person = { sayHi: () => { console.log(this) } } person.sayHi() // window 改变 this 指向 通过 call() apply() bind() 可以改变 this 指向。
2.改变函数内部 this 指向 JavaScript为我们专门提供了一些函数方法来帮我们更优雅的处理函数内部 this的指向问题,常用的有bind()、call()、apply()三种方法。 简单理解为调用函数的方式,但是它可以改变函数的 this 指向 fun. call (thisArg, arg1, arg2, ...) 应用场景: 经常做继承. // 此时的this指向的是window 运行结果为3 fn.call(o,1,2)//此时的this指向的是对象o,参数使用逗号隔开,运行结果为3 以上代码运行结果为: ? window 运行结果为3 fn.apply(o,[1,2])//此时的this指向的是对象o,参数使用数组传递 运行结果为3 ? 但是能改变函数内部this 指向 fun. bind (thisArg, arg1, arg2 ...)
JS(ES5)里面有三种函数调用形式: func(p1, p2) obj.child.method(p1, p2) func.call(context, p1, p2) // 先不讲 apply 一般 等价于 func.call(undefined, p1, p2) obj.child.method(p1, p2) 等价于 obj.child.method.call(obj.child, p1, p2 (options); // 求执行结果 // 1. x is object; // 2. object.f1(options); // 3. x.f2.call(this) ==> options.f2 ) // obejct object.f2.call(object) }, f2: function () { this.options.f2.call(this); // 有人说「箭头函数里面的 this 指向箭头函数外面的 this」,这很傻,因为箭头函数内外 this 就是同一个东西,并不存在什么指向不指向。
可以看出普通函数this指向了本身对象,而箭头函数this往外层找指向了window,因为window没有name字段所以没有输出。 箭头函数使this从“动态”变成“静态”,实质是内部没有this指向,继承上级对象this指向箭头函数的this指向定义时外部作用域内的this指向,普通函数的this指向调用时根据上下文取确认.resp4 3.无法作为构造函数 箭头函数作为匿名函数,没有prototype,没有自己的this指向,因此不能使用new构造函数非对称加密的密钥不是一个,而是一对。
} static do(){ } } const test=new test1() const Test=(function(){ function Test2( =Test }) const test2=new Test2() 类组件案例 class Test{ constructor(){ this.test=function( (){ console.log(this) } const test2=function(){ console.log(this) } test() test1() test2() 运行结果 ()=>{ console.log("t2",this) } t2() } t1() } obj2.test() 运行结果 test2 } function test2(){ console.log(this.b,"a is") } obj.test() obj.test2() obj.c.test3() 运行结果
This的指向问题一直是JavaScript的一大核心,很多人都是觉得了解了,但是又模模糊糊。简单概括就是,this的指向永远是指向调用这个this的对象。下面介绍几个本人理解的this指向问题。 b: function () { console.log(this.a); } }; obj.b(); 可以看见,b方法是对象obj里面的方法,那么调用b方法的对象就是obj,这时的this指向就是指向 接下来就是改变this指向的两个方法,call和apply,两个都是改变this的指向,只是参数不同,两个方法的第一个参数都是想要改变this指向的对象,call除了第一个参数外,剩下的都是方法的参数, obj = { a: 100, b: function (x, y) { console.log(x); console.log(y); } }; obj.b.apply(window, [1, 2] ); obj.b.call(window, 1, 2); 当要传参数的时候,第一个就必须是指定的对象,call之后的参数就是方法的参数,apply数组的参数就是方法的参数。
我们在注册一些免费域名或者使用多个域名的时候,经常会遇到域名指向的问题。域名指向有隐藏性和非隐藏性两种类型。 隐藏指向和非隐藏指向都可以将与名指向到客户指定的已经可以访问的网站,但是这两种指向方式还是存在不一样的地方。 域名指向有什么用? 例如您已经注册了yiqixue.net ,但是并没有使用这个域名建站,只希望这个域名指向到已经可以正常使用的一个网站的子目录,就可以使用域名指向的功能来实现。 域名隐藏指向和非隐藏指向有何不同? 例如域名 www.yiqixue.net 要指向到已经可以访问的 http://www.hcm602.cn 使用域名隐藏操作的结果: 在IE地址栏输入: https://www.cmhello.com
function sum(c) { console.log(this.a + this.b + c); } var obj = { a: 1, b: 2 }; var newF = sum.bind * } */ function C(){ this.a = 37; } var o = new C(); console.log(o.a); // logs 37 function C2( ){ this.a = 37; return {a:38}; } o = new C2(); console.log(o.a); // logs 38 在刚刚的例子中(C2),因为在调用构造函数的过程中
要知道 this 指向问题,需要知道函数调用栈,函数调用的位置。 baz 的调用位置 绑定规则 独立函数调用 function foo() { console.log(this.a) } var a = 10 foo() // 10 在本例子中 this 默认指向了 隐式绑定 非严格模式下,函数调用 this 指向调用者。 var a = "oops, global"; // a 是全局对象的属性 bar(); // "oops, global" 调用的位置是在全局对象上的,所以 this 指向了 window 一种更微妙 " 实际上 this 也是指向 window 的 将函数传入内置函数呢: function foo() { console.log( this.a ); } var obj = {
先搞清楚一点,如果this在函数里面,那么它指向的是“函数执行后”的上一级调用对象。 var a="this is a"; function main() { console.log(this.a)//这里this指向window. } main()//这里相当于 o,因为你调用这个say是通过o.say()执行的,那自然指向就是对象o,这里再次强调一点,this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。 :“maomin”,say1:function(){console.log(this.name);//maomin}}window.o.say1();// 上面几行代码和之前的代码几乎相似,为什么没有指向 window,这就回到了我刚开始说的,this如果在函数内,那么它指向的是该函数执行后的上一级调用对象。
2.this 2.1函数内部的this指向 这些 this 的指向,是当我们调用函数的时候确定的。调用方式的不同决定了this 的指向不同 一般指向我们的调用者. ? = { name: 'andy' } function fn(a, b) { console.log(this); console.log(a+b) }; fn(1,2) // 此时的this指向的是window 运行结果为3 fn.call(o,1,2)//此时的this指向的是对象o,参数使用逗号隔开,运行结果为3 以上代码运行结果为: ? window 运行结果为3 fn.apply(o,[1,2])//此时的this指向的是对象o,参数使用数组传递 运行结果为3 ? ; console.log(a + b); }; var f = fn.bind(o, 1, 2); //此处的f是bind返回的新函数 f();//调用新函数 this指向的是对象o 参数使用逗号隔开
箭头函数基本使用 // 箭头函数: 也是一种定义函数的方式 // 1.定义函数的方式: function const aaa = function () { } // 2.对象字面量中定义函数 // // } const ccc = () => { } 带返回值的箭头函数 // 1.参数问题: // 1.1.放入两个参数 const sum = (num1, num2) => { return num1 + num2 } // 1.2.放入一个参数 const power = num => { return num * num } // 2.函数中 // 2.1.函数代码块中有多行代码时 const test = () => { // 1.打印Hello World console.log('Hello mul = (num1, num2) => { // return num1 + num2 // } const mul = (num1, num2) => num1 * num2
函数中this指向对于一些开发者来说一直是一个比较头疼的问题,this在js中比较灵活,不同的情况指向不同,小shy总结出了函数调用的this指向的一些情况,供大家参考。 1. 默认绑定 function fn() { console.log(this); } fn(); 结果:this指向window对象 函数在被调用的时候,this会默认指向全局对象window 2. } }; const obj2 = { name: "小红" }; obj1.fn.call(obj2); // 小红 obj1.fn.apply(obj2); // 小红 obj1.fn.bind (obj2)(); // 小红 这里call()、apply和bind方法都是可以改变函数的this指向,所以fn函数调用this都指向了obj2对象,所以得出结果为小红。
JavaScript 中this取什么值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了,因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境 this作为普通函数,指向 window function fn1() { console.log(this) } fn1() // window 使用call() apply() bind(),指向第一个参数 fn1.call ({x: 100}) // 指向第一个参数 {x: 100} 作为对象方法被调用,指向调用该方法的对象 const niangao = { name: '年糕', sayHi() { / // setTimeout是作为普通函数去执行,而不是作为niangao.wait()去执行 console.log(this) }) } } 在class方法中被调用,指向实例对象 } eat() { console.log(this) } } const niangao = new Food('年糕') niangao.eat() // Food{} 箭头函数,指向上级作用域的
由于环境限制,现在需要把2套rac集群通过dg复制指向远端的单机多实例上面。 rac指向第一个实例的前面已经有文档 这里直接添加第二个实例的复制搭建,主要标出不同地方 单实例环境--standby CentOS release 6.10 (Final) hostname dg1 ip 10.*.30 Instance_name cad DB_NAME bol --此次2个一样 db_unique_name cad SQL*Plus: Release 11.2.0.4.0 Production onlinelog /u01/app/oracle/oradata/orcl/cad 基本步骤与上面相同,只是实例名有不同之处 1 主库rac集群,设置为归档,和force logging模式 2 u01/app/oracle/archive/cad valid_for=(all_logfiles,all_roles) db_unique_name=cad' *.log_archive_dest_2=
本文继续讨论 this 指向 问题,今天讨论: 函数中的this 0 1 箭头函数 箭头函数忽略任何形式的this指向改变. 当在严格模式下,test打印还是为window, test2 则打印undefined 箭头函数中的this ,不是谁调用就指向谁 示例2: obj.test=()=>{ console.log (); 结果为:window 总结:箭头函数 this 作用域, 指向外层非箭头函数作用域的this 另注: 箭头函数一定不能是一个构造器. 总结: call、apply、bind 三个方法都可以改变函数中this 的指向 call、apply :立即执行 bind 返回一个新函数 var obj={ name:'sunshine', '} 改变this obj.sayHi.call(obj2); obj.sayHi.apply(obj2); 上面的代码,将立即调用函数,且打印obj2.name中的name属性。