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

js一些杂乱理解

js 的值类型和引用类型

  1. 引用类型:object,array,function
  2. 值类型:诸如number,stringboolean,null,Undefined,Symbol

js使用变量访问对象属性示例

var myDog = "Hunter";
var dogs = {
Fido: "Mutt", Hunter: "Doberman", Snoopie: "Beagle"
}
var breed = dogs[myDog];
console.log(breed)// "Doberman"

object.assign 潜复制对象

仅仅只是潜复制,对于,对象里面的对象,无法复制,只会覆盖,jq中的$.extend是如果第一个参数是true,可以达到深复制的效果.请查看我的jq理解

        var target={name:'guxin',age:18}var source1={state:'signle',age:22}var source2={mood:'happy',age:25}var result=Object.assign(target,source1,source2)console.log(target)//{name: 'guxin', age: 25, state: 'signle', mood: 'happy'}

this指向还有this指向改变方法(call,apply,bind)

 var Person = {name:"lixue",age:21}function fn(x,y){console.log(x+","+y);console.log(this);console.log(this.name);console.log(this.age);}//this对象改成Person了,原本是windowfn.call(Person,"hh",20);//执行fnfn.apply(Person,["hh",20]);//执行fnfn.bind(Person,"hh",20)();//bind只绑定不执行

prototype原型 和__proto__

定义

原型是Javascript中的继承的继承,JavaScript的继承就是基于原型的继承。

函数的原型对象

在这里插入图片描述

<body><script type="text/javascript">function Person () {    	}alert(Person.prototype.constructor === Person);	// true// 可以使用Person.prototype 直接访问到原型对象//给Person函数的原型对象中添加一个属性 name并且值是 "张三"Person.prototype.name = "张三";Person.prototype.age = 20;//上面直接给Person的原型指定对象字面量。则这个对象的constructor属性不再指向Person函数alert(Person.prototype.constructor === Person); //false//如果constructor对你很重要,你应该在Person.prototype中添加一行这样的代码:/*Person.prototype = {constructor : Person	//让constructor重新指向Person函数}*/var p1 = new Person();//使用instanceof 操作符可以判断一个对象的类型。  //typeof一般用来获取简单类型和函数。而引用类型一般使用instanceof,因为引用类型用typeof 总是返回object。alert(p1 instanceof Person);	// true/*访问p1对象的属性name,虽然在p1对象中我们并没有明确的添加属性name,但是p1的 [[prototype]] 属性指向的原型中有name属性,所以这个地方可以访问到属性name就值。注意:这个时候不能通过p1对象删除name属性,因为只能删除在p1中删除的对象。*/alert(p1.name);  // 张三var p2 = new Person();alert(p2.name);  // 张三  都是从原型中找到的,所以一样。alert(p1.name === p2.name);  // true// 由于不能修改原型中的值,则这种方法就直接在p1中添加了一个新的属性name,然后在p1中无法再访问到//原型中的属性。p1.name = "李四";alert("p1:" + p1.name);// 由于p2中没有name属性,则对p2来说仍然是访问的原型中的属性。	alert("p2:" + p2.name);  // 张三  </script>
</body>

原型和call,apply,bind这些方法,带来的最终继承方案

利用call等来继承属性,用原型来继承方法

<script type="text/javascript">//定义父类型的构造函数function Father (name,age) {// 属性放在构造函数内部this.name = name;this.age = age;// 方法定义在原型中if((typeof Father.prototype.eat) != "function"){Father.prototype.eat = function () {alert(this.name + " 在吃东西");}}  }// 定义子类类型的构造函数function Son(name, age, sex){//借调父类型的构造函数,相当于把父类型中的属性添加到了未来的子类型的对象中Father.call(this, name, age);this.sex = sex;}//修改子类型的原型。这样就可以继承父类型中的方法了。Son.prototype = new Father(	);var son1 = new Son("志玲", 30, "女");alert(son1.name);alert(son1.sex);alert(son1.age);son1.eat();
</script>

//Son.prototype = new Father();//改成下面的代码有什么不妥的地方么?//暂且未知
Son.prototype=Father.prototype

详情参考: 原型理解

ES6新增语法部分,日后整理

http://www.lryc.cn/news/427275.html

相关文章:

  • 机器学习 之 线性回归算法
  • ThreadLoad如何防止内存溢出
  • 2024.8.19 学习记录 —— 作业
  • Java 阿里云视频直播开发流程
  • SQLite 轻量级的嵌入式关系型数据库的替代软件
  • Flutter-自适用高度PageView
  • 群晖NAS本地搭建可远程交互的大型语言模型LLM聊天机器人
  • TypeScript 构建工具之 webpack
  • conda环境下在pycharm中调试scrapy项目
  • contenteditable=“true“的标签限制字数的时候修改光标位置
  • 51单片机-LED灯蜂鸣器数码管按键DS18B20温度传感器
  • 笔记本一线品牌有哪些
  • mysql聚合函数和分组
  • ubuntu20.04+RealSenseD455
  • WAF绕过技巧
  • HarmonyOS应用三之组件生命周期和参数传递
  • [Qt][Qt 网络][上]详细讲解
  • 读零信任网络:在不可信网络中构建安全系统21读后总结与感想兼导读
  • Java基础——注释
  • Redis未授权访问漏洞利用合集
  • 基于asp.net的在线考试系统、基于c#的在线考试管理系统
  • 将 hugo 博客搬迁到服务器
  • 【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署
  • CTF密码学小结
  • Vue快速入门(七)——Vue3 状态管理 - Pinia(二)
  • ZooKeeper集群环境部署
  • 10 个 C# 关键字和功能
  • 贪心算法之重叠区间问题
  • Python爬虫入门教程(非常详细)适合零基础小白
  • ArcGIS Pro基础:软件的常用设置:中文语言、自动保存、默认底图