当前位置: 首页 > news >正文

渭南哪家公司可以做网站文案代写收费标准

渭南哪家公司可以做网站,文案代写收费标准,新疆做网站公司,网站建设服务标准化具体见:https://github.com/febobo/web-interview 10.this指向 根据不同的使用场合,this有不同的值,主要分为下面几种情况: 默认绑定隐式绑定new绑定显示绑定 ①默认绑定 全局环境中定义person函数,内部使用this关…

具体见:https://github.com/febobo/web-interview

10.this指向

根据不同的使用场合,this有不同的值,主要分为下面几种情况:

  • 默认绑定
  • 隐式绑定
  • new绑定
  • 显示绑定
①默认绑定

全局环境中定义person函数,内部使用this关键字

var name = 'Jenny';
function person() {return this.name;
}
console.log(person());  //Jenny

上述代码输出Jenny,原因是调用函数的对象在游览器中位window,因此this指向window,所以输出Jenny

注意:

严格模式下,不能将全局对象用于默认绑定,this会绑定到undefined,只有函数运行在非严格模式下,默认绑定才能绑定到全局对象

②隐式绑定

函数还可以作为某个对象的方法调用,这时this就指向这个上级对象。

//this 永远指向最后调用它的对象
var o = {a:10,b:{fn:function(){console.log(this.a); //undefined}}
}
o.b.fn();

因为this的上一级对象为b,而b内部并没有a变量的定义,所以输出undefind

③new绑定

通过构建函数new关键字生成一个实例对象,此时this指向这个实例对象

function test() {this.x = 1;
}var obj = new test();
obj.x // 1

上述代码之所以能过输出1,是因为new关键字改变了this的指向。

而当new的过程中遇到return一个对象时,此时this指向这个对象。

function fn()  
{  this.user = 'xxx';  return {user = '123'};  
}
var a = new fn();  
console.log(a.user); //123

而当return一个基本类型时,this还是指向它的实例。

function fn()  
{  this.user = 'xxx';  return 1;
}
var a = new fn;  
console.log(a.user); //xxx

null同理指向实例。

④显式修改

使用apply | call | bind改变函数的调用对象,第一个参数就是改变后调用这个函数的对象。

var x = 0;
function test() {console.log(this.x);
}var obj = {};
obj.x = 1;
obj.m = test;
obj.m.apply(obj) // 1

而三者的区别:

  • 三者都可以改变函数的this对象指向
  • 三者第一个参数都是this要指向的对象,如果如果没有这个参数或参数为undefinednull,则默认指向全局window
  • 三者都可以传参,但是apply是数组,而call是参数列表,且applycall是一次性传入参数,而bind可以分为多次传入。
  • bind 是返回绑定this之后的函数,apply call 则是立即执行 。
⑤箭头函数

箭头函数的this非常特殊,因为它在函数定义时就被确定了,而且不会被动态改变。

<body><div><button class="btn1">普通函数</button><button class="btn2">箭头函数</button></div>
</body>
const btn1 = document.querySelector('.btn1');
const btn2 = document.querySelector('.btn2');btn1Click = function () {console.log("btn1" + this); //button
}
btn2Click = () =>{console.log("btn2" + this); // window
}
btn1.addEventListener("click", btn1Click, false);
btn2.addEventListener("click", btn2Click, false);

可以看到默认函数的是由btn2调用的,所以指向btn2;而箭头函数在编译时就被绑定了,即btn2Click在创建时就定义了this,所以this指向window对象。

此外,箭头函数可以看作是匿名函数,是一次性的,所以与默认函数区别很明显。

  • 箭头函数没有构造函数,没有原型对象
  • 箭头函数没有arguments对象
  • 箭头函数的this在定义时就被确认了,不会动态更新
其他

隐式绑定 VS 显式绑定

function foo() {console.log( this.a );
}var obj1 = {a: 2,foo: foo
};var obj2 = {a: 3,foo: foo
};obj1.foo(); // 2
obj2.foo(); // 3obj1.foo.call( obj2 ); // 3
obj2.foo.call( obj1 ); // 2

显然,显示绑定的优先级更高

new绑定 VS 隐式绑定

function foo(something) {this.a = something;
}var obj1 = {foo: foo
};var obj2 = {};obj1.foo( 2 );
console.log( obj1.a ); // 2obj1.foo.call( obj2, 3 );
console.log( obj2.a ); // 3var bar = new obj1.foo( 4 );
console.log( obj1.a ); // 2
console.log( bar.a ); // 4

可以看到,new绑定的优先级>隐式绑定

new绑定 VS 显式绑定

因为newapply、call无法一起使用,但硬绑定也是显式绑定的一种,可以替换测试

function foo(something) {this.a = something;
}var obj1 = {};var bar = foo.bind( obj1 );
bar( 2 );
console.log( obj1.a ); // 2var baz = new bar( 3 );
console.log( obj1.a ); // 2
console.log( baz.a ); // 3

bar被绑定到obj1上,但是new bar(3) 并没有像我们预计的那样把obj1.a修改为3。但是,new修改了绑定调用bar()中的this

我们可认为new绑定优先级>显式绑定

综上,new绑定优先级 > 显示绑定优先级 > 隐式绑定优先级 > 默认绑定优先级

http://www.ds6.com.cn/news/44546.html

相关文章:

  • 网站架构设计师薪资水平推广网站
  • 2018网站流量怎么做企业网址
  • 国内flask做的网站谷歌seo价格
  • 网站建设pc端网站推广公司黄页
  • 用网站做淘宝客怎么样seo优化需要多少钱
  • 个人简历封面青岛seo百科
  • 微信网站是多少钱一年网站优化培训学校
  • 亚马逊网站建设案例分析惠州自动seo
  • ecshop网站建设百度seo排名原理
  • 好听的公司名字优化营商环境心得体会
  • 手机上怎样制作网站百度下载app下载安装
  • 做网站的用户需求分析手机一键优化
  • 关于企业网站建设的请示免费发布平台
  • 怎么用自己的电脑做网站网站建设策划
  • 网站有没有做网站地图怎么看广西网络推广公司
  • 做网站常用的cssseo在线优化技术
  • wordpress无域名ip访问抖音seo是什么意思
  • 做相亲网站需要什么流程网站建设首页
  • 能源公司网站模板搜索引擎推广文案
  • 学做婴儿衣服网站中国搜索
  • 做网站的好处在哪里阜康管委主任个人网站开发网
  • 口碑好的邵阳网站建设如何营销推广
  • 哪一个做h5的网站好企业品牌营销推广
  • 智能模板网站建设价格百度资源搜索平台官网
  • 个人网站建站流程百度一下电脑版首页
  • 保定有哪些做网站的地方网站seo主要是做什么的
  • 东莞网站设计行情怎样创建一个自己的网站
  • 家具网站asp营销网站的建造步骤
  • 定制网站建设费用预算沈阳关键词优化费用
  • 苍南做网站哪里找苏州网站优化公司