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

做公众号商城原型的网站asp做网站上传文件系统

做公众号商城原型的网站,asp做网站上传文件系统,租服务器发布网站,wordpress编辑颜色this指向 执行上下文 是代码执行时的运行环境作用域 是变量和函数的可访问性规则(静态);全局、函数和块状;内层可访问外层,外层不能访问内层词法环境 是实现作用域的引擎内部机制(静态) 执行上…

this指向

  • 执行上下文 是代码执行时的运行环境
  • 作用域 是变量和函数的可访问性规则(静态);全局、函数和块状;内层可访问外层,外层不能访问内层
  • 词法环境 是实现作用域的引擎内部机制静态
    在这里插入图片描述
    执行上下文
    ├─ 变量环境 (VariableEnvironment)
    ├─ 词法环境 (LexicalEnvironment) → 作用域链
    └─ this 绑定
  • ​​执行上下文​​是代码运行的临时环境,每次函数调用新建。
  • ​​作用域​​是变量访问的规则,分全局/函数/块级作用域,内层可访问外层,外层不能访问内层
    ​​ - 词法作用域​​强调作用域在代码书写时确定闭包基于此实现。
  • ​​区别​​:作用域是规则,执行上下文是规则运行时的具体实例。
  • 联系: 执行上下文中的​​作用域链​​基于词法作用域构建,逐层向上查找变量
  • 闭包的本质是函数保留了定义时的词法作用域(即使外层函数已销毁)

new绑定>显式绑定>隐式绑定>默认绑定

function myNew(constructor,...args){// 1.创建一个空对象// 2. 将这个空对象的原型设置为构造函数的 prototype 属性  let obj =obj.create(constructor.Prototype);// 3. 将构造函数的 this 绑定到这个新对象,并执行构造函数  let result=constructor.apply(obj,args);// 4. 如果构造函数返回一个对象,则返回这个对象,否则返回新创建的对象return typeof result ===`object`?result:obj;
}

call&apply:判断调用对象是否为函数(this)->判断context是否为对象
bind:判断调用对象是否为函数(this)->定义一个新函数(根据是否使用new关键字调用设置this)->设置函数原型->返回新函数
bind方法不熟

 /* call函数 */
//  参数区别:call 方法接受一个参数列表,而 apply 方法接受一个包含多个参数的数组
//  bind方法返回一个新函数,而 call 和 apply 方法会立即执行函数/* Function.prototype.myCall = function (context, ...args) {// 判断调用对象是否为函数,this!!!if (typeof this !== 'function') {throw new TypeError('Error');}// 判断context是否为空context = context || window;// 判断context是否为对象!!if (typeof context !== 'object') {context = new Object(context);}// 将调用函数作为 context 的一个属性const fnSymbol = Symbol('fn');context[fnSymbol] = this;// 调用函数并传入参数const result = context[fnSymbol](...args);// 删除临时属性delete context[fnSymbol];// 返回结果return result;};function greet(message) {console.log(`${message}, ${this.name}`);}const person = { name: 'John' };greet.myCall(person, 'Hello');  *//* apply函数 */Function.prototype.myApply = function (context, args) {// 判断调用对象是否为函数,this!!!if (typeof this !== 'function') {throw new TypeError('Error');}// 判断context是否为空context = context || window;// 判断context是否为对象   if (typeof context !== 'object') {context = new Object(context);}// 将调用函数作为 context 的一个属性const fnSymbol = Symbol('fn');context[fnSymbol] = this;// 调用函数并传入参数const result = context[fnSymbol](...args);// 删除临时属性delete context[fnSymbol];// 返回结果return result;}//bind函数Function.prototype.myBind = function (context = window, ...initialArgs) {// 检查调用 myBind 的是否为函数if (typeof this!== 'function') {throw new TypeError('调用 myBind 的对象必须是函数');}// 保存调用 myBind 的原始函数const originalFunction = this;// 返回一个新函数const boundFunction = function (...newArgs) {// 判断是否使用 new 调用//当一个函数使用 new 调用时, this 会指向新创建的实例对象,并且这个实例对象会继承自该函数的原型。const isUsingNew = this instanceof boundFunction;// 合并预设参数和新传入的参数const allArgs = [...initialArgs, ...newArgs];// 如果是使用 new 调用,this 指向新创建的实例const thisValue = isUsingNew? this : context;// 调用原始函数return originalFunction.apply(thisValue, allArgs);};// 复制原函数的原型,确保 boundFunction 作为构造函数时,新实例能继承原函数的原型方法if (originalFunction.prototype) {boundFunction.prototype = Object.create(originalFunction.prototype);}return boundFunction;
};
//测试bind方法
function greet(message) {console.log(`${message}, ${this.name}`);
}const person = { name: 'John' };
const greetPerson = greet.myBind(person, 'Hello');
greetPerson(); // 输出: Hello, John// 测试 new 调用
function Person(name) {this.name = name;
}
const BoundPerson = Person.myBind(null);
const newPerson = new BoundPerson('Alice');
console.log(newPerson.name); // 输出: Alice

文章转载自:

http://x4beKkOs.qxmnf.cn
http://MduaWQKm.qxmnf.cn
http://wyxI6Hhy.qxmnf.cn
http://5fVpPxvh.qxmnf.cn
http://C2u1bOBE.qxmnf.cn
http://uNZVpLQ9.qxmnf.cn
http://J3B22yoq.qxmnf.cn
http://8W9Eefa0.qxmnf.cn
http://ZSLWF8X6.qxmnf.cn
http://9xIJxcHn.qxmnf.cn
http://rl3kO4f9.qxmnf.cn
http://oMLBwaV7.qxmnf.cn
http://0Sr0EgXE.qxmnf.cn
http://vkcxRzwR.qxmnf.cn
http://HZ5UTjlI.qxmnf.cn
http://iaKJyJyB.qxmnf.cn
http://1blhZoIM.qxmnf.cn
http://6jIlaH48.qxmnf.cn
http://EDvxAcZ3.qxmnf.cn
http://Z6LiibQu.qxmnf.cn
http://T1FBWNne.qxmnf.cn
http://7beCScjn.qxmnf.cn
http://voKTi4AL.qxmnf.cn
http://z8hYvKN0.qxmnf.cn
http://LPqTPeYD.qxmnf.cn
http://OIhiWoSk.qxmnf.cn
http://tJH3Hd1U.qxmnf.cn
http://7RGytZ2h.qxmnf.cn
http://Es14Ilzv.qxmnf.cn
http://g9JWiZRU.qxmnf.cn
http://www.dtcms.com/wzjs/765781.html

相关文章:

  • 自己做的网站打开速度慢网站后台怎么给图片做水印
  • 开个送快餐网站怎么做团队协同网站开发
  • 电子政务和网站建设自评2017 上海网站备案
  • 重庆手机模板建站wordpress 编辑器 国外
  • 怎么做跳转不影响原网站排名网站建设优化两千字
  • 太原网站建设需要多少钱做经营性的网站需要注册什么条件
  • 公司做网站要三千多吗永康网站建设优化建站
  • wordpress文章站重庆网站推广哪家服务好
  • 做俄语网站建设成都网络运营外包
  • 交流稿 网站建设怎样查看网站开发语言
  • 网站开发属于计算机系统开发吗商业网站首页怎么做
  • 网站风格包括wordpress 访问密码
  • wordpress网站是什么意思校园网站建设方案策划书
  • 企业网站建设的缺点制作网页之前必须先建立什么
  • 91卫星地图手机版下载官网网站版面布局对seo
  • 快速建企业网站杭州做网站一般多少钱
  • 医疗保健 网站 备案宁夏建设职业技术学院网站
  • 饮料网站建设网站的关键词可以取消吗
  • 宁波市高等级公路建设指挥部网站朔州网站建设收费多少
  • 找装修公司去哪个网站网页设计图片里面怎么包含文字
  • 网站建设需要缴纳印花税么个人网站可以做淘宝客嘛
  • 广州网站搭建费用网站恶意做评论
  • 浙江省建设政务网站网站开发中的开版什么意思
  • 怎么做冒牌网站青岛建网站的公司有哪些
  • 装潢设计专业可以考二建吗宁波seo教程
  • 空间网站链接怎么做廊坊网站建设总部在哪里
  • 做宣传册参考的网站网站怎么设置标题
  • 专业官网建设免费seo视频教程
  • 网站开发用mvc多吗徐州网站建设外包
  • 芒果tv网站建设的目标个性化定制网站的特点