武威网站怎么做seo服装设计师月薪多少

张小明 2026/1/13 9:55:38
武威网站怎么做seo,服装设计师月薪多少,广州有资质的网页制作公司,天津网站建设服务MAUI#xff0c;不能不说#xff0c;好。也不得不说#xff0c;好——多坑。指望一个 Windows 平台当家的大厂#xff0c;把自家与 Windows 平台深度绑定的 .Net 运行时#xff0c;和 .Net 的天生语言 C##xff0c;如同支持 Windows 平台一样支持其他平台#xff0c;那…MAUI不能不说好。也不得不说好——多坑。指望一个 Windows 平台当家的大厂把自家与 Windows 平台深度绑定的 .Net 运行时和 .Net 的天生语言 C#如同支持 Windows 平台一样支持其他平台那是想多了。因为喜欢 C# 的优美还有 Visual Studio 的近乎完美我选择性相信了当初他们宣称的跨平台支持能力。事已至此得失不论。没必要质疑他们的努力也没必要纠结他们的动机反正结果是现实不由人。于是我尝试引入 HTML 5作为前端。而且是纯粹的那种不要框架只依赖原生。我本喜欢强类型语言但这次JavaScript 绕不过。好在语言相互借鉴大概念趋同。本文专门谈谈 this 似同非同的处理。一、C# 中的 this乖孩子在 C# 这类强类型语言中this 是让开发者省心的乖孩子行为稳定、规则清晰从定义到运行始终如一。编译期绑定指向this 在写代码时锁死了关联当前类的实例无论方法是直接调用、作为委托传递还是通过其他方式触发this 都不会“跑偏”。public class Person {public string Name { get; set; }public void SayHi() Console.WriteLine($Hi, {this.Name});}var person new Person { Name 张三 };Action say person.SayHi; // 提取方法引用say(); // 输出 Hi, 张三this 仍指向 person 实例继承的先父后子无论是隐式调用父类无参构造还是显式调用有参构造父类的构造函数总是先执行父类成员先行完成初始化不会出现子类访问未就绪的父类属性的情况。// 父类仅定义有参构造无无参构造public class Parent {protected string Name;public Parent(string name) { // 有参构造this.Name name;}}// 子类必须显式调用父类的 Parent(string) 构造否则报错public class Child : Parent {public int Age;// 正确显式调用父类有参构造public Child(string name, int age) : base(name) {this.Age age;Console.WriteLine($子类初始化{this.Name}{this.Age}); // 正常Name 已由父类初始化}// 错误示例无法编译未显式调用 base(name)// 父类有隐式无参构造未定义任何构造时编译器自动生成// public class Parent {// protected string Name; // 父类成员// }// public Child(string name, int age) {// this.Age age;// }// 编译报错“Parent”不包含采用 0 个参数的构造函数}事件回调中的身份自觉在 UI 事件如按钮点击中this 始终指向当前组件/页面实例绝不会指向触发事件的控件如按钮本身。// 按钮点击事件中this 指向当前页面而非按钮button.Click (s, e) Console.WriteLine(this.Title);C# 的 this 之所以“乖”核心是静态绑定——行为在编译期就确定运行时无需额外判断。这个核心特性恰恰是 JavaScript 早期 this 所缺乏的。二、JavaScript 的 this似是而非早期 JavaScript 没有类的概念通过 “构造函数原型链” 模拟面向对象this 因“动态绑定”特性从强类型语言的角度看其表现堪比怪物this 指向完全依赖调用方式稍不注意就出错。// 早期模拟类的方式this 容易失控function Person(name) {this.name name; // 构造函数中 this 指向实例需用 new 调用}Person.prototype.sayHi function() {console.log(Hi, ${this.name}); // 原型方法中 this 依赖调用者};const person new Person(张三);person.sayHi(); // 正常this 指向 personconst say person.sayHi;say(); // 报错this 指向全局2015 年 ES6 引入 class、extends 等特性明显吸收了 C#、Java 等强类型语言的设计思想让 JavaScript 的面向对象更贴近开发者直觉。// 类似 C# 的类定义结构更清晰class Person {constructor(name) {this.name name; // 构造函数中 this 指向实例}sayHi() {console.log(Hi, ${this.name}); // 类方法中的 this}}这种借鉴并非复制粘贴JavaScript 仍保留动态语言特性但 class 语法降低了理解成本。class 本质是“语法糖”底层仍基于原型链prototype只是包装后更像 C# 的类实例初始化 。constructor 对应 C# 的构造函数new 调用时this 指向新创建的实例用于初始化实例属性this.xxx。class Person {constructor(name) {this.name name; // name 是实例属性每个实例单独拥有}}类方法默认挂载在原型上。类中定义的方法如 sayHi会被挂载到类的原型Person.prototype上所有实例共享该方法。这和 C# 中”方法在类中实例共享方法定义“的逻辑一致但底层实现不同C# 基于类JavaScript 基于原型链。const p1 new Person(张三);const p2 new Person(李四);p1.sayHi p2.sayHi; // true共享原型上的方法static 方法挂载在类本身而非原型this 指向类本身。C# 静态方法中无 this但逻辑类似不依赖实例。class Person {static createDefault() {return new Person(默认名称); // this 指向 Person 类}}const defaultPerson Person.createDefault();基于原型链封装的 extends 继承class Child extends Parent 本质是让 Child.prototype.__proto__ 指向 Parent.prototype但语法上模拟了 C# 的继承。super 对应 C# 的 base用于调用父类的构造函数或方法。三、让 JavaScript 的 this 怪物变成乖孩子JavaScript 的 this 像怪物核心是指向由函数调用时的方式决定属于动态绑定而非定义时的静态绑定。 动态绑定规则决定 this 指向绑定类型 调用方式示例 this 指向 与 C# 的对比默认绑定 fn() 全局对象非严格模式/undefined严格模式 无对应C# 无全局 this隐式绑定 obj.fn() 调用方法的对象 obj 类似 C# 实例调用方法this 指向实例显式绑定 fn.call(obj)/fn.apply(obj)/fn.bind(obj) 被指定的对象 obj 无对应C# this 不可改new 绑定 new Fn() 新创建的实例对象 类似 C# new 实例化this 指向实例示例// 同个函数不同调用方式this 指向不同**function showThis() {console.log(this);}const obj { name: 测试对象, showThis };showThis(); // 默认绑定 → 全局对象obj.showThis(); // 隐式绑定 → objshowThis.call({ custom: 自定义对象 }); // 显式绑定 → 自定义对象new showThis(); // new 绑定 → 新实例但 JavaScript 提供了显式绑定工具call / apply / bind 可以手动控制this 指向让它像 C# 的 this 那样驯服。方法 作用 调用时机 适用场景call 强制 this 指向第一个参数立即执行函数 立即执行 明确参数数量时调用函数apply 强制 this 指向第一个参数立即执行函数 立即执行 参数以数组形式存在时bind 强制 this 指向第一个参数返回新函数延迟执行 延迟执行 固定事件回调、方法提取后调用1bind 优先级最高绑定后不可修改类似 C# 中 this 的不可变性function sayHi() {console.log(Hi, ${this.name});}const person { name: 张三 };const boundSayHi sayHi.bind(person); // 绑定 this 到 personboundSayHi(); // 输出 Hi, 张三boundSayHi.call({ name: 李四 }); // 仍输出 Hi, 张三bind 不可覆盖2箭头函数天生继承外层 this规避动态陷阱ES6 箭头函数没有自己的 this其 this 继承自外层作用域定义时的上下文行为类似 C# 匿名方法捕获当前 this 的特性。这是让 this 变“乖”的更简洁方式。对比普通函数与箭头函数class Timer {constructor() {this.seconds 0;// 普通函数this 指向调用者setTimeout 的全局环境setInterval(function() {this.seconds; // 错误this.seconds 未定义}, 1000);// 箭头函数this 继承自 constructorTimer 实例setInterval(() {this.seconds; // 正确this 指向 Timer 实例}, 1000);}}适用场景事件回调、定时器、嵌套函数中需要保留外层 this 时优先使用。3 内存泄漏this 引发的暗坑C# 有自动垃圾回收机制但 JavaScript 中若 this 关联的事件回调未正确解绑会导致对象无法被回收引发内存泄漏。错误示例动态生成的函数无法解绑class Component {constructor() {this.name 组件;// 错误每次 bind 生成新函数后续无法解绑document.querySelector(button).addEventListener(click, this.handleClick.bind(this));}handleClick() { console.log(this.name); }destroy() {// 失败解绑的函数与绑定的不是同一个引用document.querySelector(button).removeEventListener(click, this.handleClick.bind(this));}}正确做法保存绑定后的函数引用class Component {constructor() {this.name 组件;// 提前绑定并保存引用this.boundHandleClick this.handleClick.bind(this);document.querySelector(button).addEventListener(click, this.boundHandleClick);}handleClick() { console.log(this.name); }destroy() {// 用同一引用解绑document.querySelector(button).removeEventListener(click, this.boundHandleClick);this.boundHandleClick null; // 释放引用}}四、HTML 5 自定义 UI 组件中 this 规范化在 HTML5 开发自定义 UI 组件如按钮、表单控件时this 的坑会集中爆发。结合类与继承我们可以用规范化技术解决。场景 1自定义按钮组件基础类问题事件回调中 this 指向 DOM 元素而非组件实例。class CustomButton {constructor(label) {this.label label; // 组件属性this.btn document.createElement(button);this.btn.textContent label;// 坑点击时 this 指向 btnDOM 元素this.btn.addEventListener(click, this.onClick);document.body.appendChild(this.btn);}onClick() {console.log(点击了 ${this.label}); // 报错this.label 不存在}}解决用 bind 或箭头函数固定 this 指向组件实例。class CustomButton {constructor(label) {this.label label;this.btn document.createElement(button);this.btn.textContent label;// 方案 1bind 绑定this.btn.addEventListener(click, this.onClick.bind(this));// 方案 2箭头函数回调更简洁// this.btn.addEventListener(click, () this.onClick());document.body.appendChild(this.btn);}onClick() {console.log(点击了 ${this.label}); // 正确this 指向组件实例}}场景 2带图标的按钮子类继承问题子类构造函数未调用 super() 就使用 this直接报错。class IconButton extends CustomButton {constructor(label, icon) {this.icon icon; // 报错必须先调用 super()super(label);}}解决严格遵循“先 super() 后 this”对齐 C# 的 base() 逻辑。class IconButton extends CustomButton {constructor(label, icon) {super(label); // 先调用父类构造this.icon icon; // 再初始化子类属性this.btn.innerHTML i${icon}/i ${label}; // 扩展父类 DOM}// 重写父类方法onClick() {console.log(点击了带 ${this.icon} 图标的 ${this.label});}}场景 3组件移除/销毁与资源清理问题事件未解绑导致内存泄漏。解决提供 destroy 方法手动解绑事件并释放引用。class CustomButton {// ... 其他代码 ...destroy() {// 解绑事件用绑定时期的引用this.btn.removeEventListener(click, this.boundOnClick || this.onClick);this.btn.remove(); // 移除 DOM 元素// 释放属性引用this.btn null;this.label null;}}五、几点心得如果您像我一样熟悉 C# 或者 Java 这样的强类型语言 只是偶尔使用 JavaScript 配置前端我的建议与其花时间通透掌握 JavaScript 本身不如改造它适合自己的思维习惯。用强类型思维顺服 this更顺手。具体来说直接用 ES忽略传统 JavaScript 语法尽管语言本身是向后兼容的。用 class 对齐结构借助 class 和 extends让 JavaScript 类的写法贴近 C# 降低认知成本用 bind 或箭头函数固定 this抵消动态性模拟 C# 中“方法与实例强绑定”的特性子类构造函数先 super() 后 this对齐 C# 的 base() 调用逻辑主动将事件回调的 this 指向组件实例避免指向 DOM 元素显式保留 connectedCallback() / disconnectedCallback() 方法只要可能统一在 connectedCallback 中注册事件在 disconnectedCallback 移除事件。确保组件移除/销毁时解绑事件释放 this 关联的引用类似 C# 的 Dispose。做到这些JavaScript 的 this 就会像邻居家强类型语言的 this 一样成为可靠、可控的乖孩子。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

自然堂网站建设策划书综合网上购物商城

二分网络分析与创伤类型网络构建 1. 二分网络分析基础 二分网络是一种包含两类节点的网络,在实际生活中广泛存在。可以直接对二分网络进行分析, networkx.algorithms.bipartite 提供了多种用于此类分析的函数,这些函数大多是单分网络同名函数的对应版本,如下表所示: …

张小明 2026/1/1 5:03:55 网站建设

手机备案网站帝国cms对比WordPress

在数字创意蓬勃发展的今天,如何将珍贵的二维图像快速转换为可触摸的三维实体,已成为众多创作者的共同追求。ImageToSTL正是为这一需求而生的革命性工具,它通过智能算法让每个人都能轻松实现图像转3D建模的梦想,为个性化创作打开全…

张小明 2026/1/1 1:29:23 网站建设

建筑知识网站信用泰安网站

iOS项目资源清理终极指南:LSUnusedResources让臃肿项目轻装上阵 【免费下载链接】LSUnusedResources A Mac App to find unused images and resources in Xcode project. 项目地址: https://gitcode.com/gh_mirrors/ls/LSUnusedResources 在iOS开发过程中&am…

张小明 2025/12/31 12:26:30 网站建设

航空港建设局网站googleseo优化

FFXIV_TexTools终极使用指南:从零开始掌握游戏模组创作 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI 想要为《最终幻想14》创作独特的角色外观和装备模组吗?FFXIV_TexTools为你提供了完整…

张小明 2025/12/30 23:31:28 网站建设

免费的自学网站大全wordpress响应式相册主题

第一章:Open-AutoGLM开源上线即爆火:现象背后的深层动因Open-AutoGLM自开源以来,短短数日内便在GitHub上斩获超万星,迅速成为大模型自动化领域的焦点项目。其爆发式增长不仅源于技术实现的创新性,更折射出开发者社区对…

张小明 2026/1/10 1:33:03 网站建设

qq电脑版官方网站软件代做公司

一、算法原理与流程 Canny边缘检测算法由John F. Canny于1986年提出,其核心流程包含5个关键步骤: 高斯滤波:消除噪声干扰(使用高斯核卷积)梯度计算:通过Sobel算子计算梯度幅值和方向非极大值抑制&#xff1…

张小明 2026/1/11 12:59:43 网站建设