首页 > 其他分享 >深拷贝+封装

深拷贝+封装

时间:2022-09-04 22:56:35浏览次数:66  
标签:console log item obj var 封装 拷贝 name

深拷贝+封装

window.onload = function(){

​ var obj = {

​ "name":'small',

​ id:1,

​ age:18,

​ arr:[1,2,3],

​ o2:{id:2},

​ action:function(){

​ }

​ };

​ //属性的设置和获取 . []区别?.取自身的属性 []可以设置变量

​ var obj2 = {};

​ obj2.name = 'abc';

​ obj2['age'] = 18;

​ var obj2 = {};

​ obj2.name = 'abc'

​ obj2.age = 22;

​ //获取

​ obj2.name; //字符串

​ var a = "age";

​ obj2[a]; //[变量]

​ //删除

​ delete obj2.age //obj2[a] obj2['age']

​ console.log(obj2); //{ name: 'abc' }

​ //检测属性

​ //in 运算符 检测属性是否存在于某个对象中,自有属性和继承属性都返回true

​ //hasOwnProperty() 方法用于检测属性是否是自有属性,是则返回true,否则返回false

​ var obj = {

​ "name":'small',

​ id:1,

​ age:18,

​ arr:[1,2,3],

​ o2:{id:2},

​ action:function(){

​ }

​ };

// console.log('name' in obj); //true

​ console.log('o2' in obj); //true

// console.log(obj.hasOwnProperty('age')); //true

​ console.log(obj.hasOwnProperty('id'))

​ //区别

​ // function Test(){};

​ // Test.prototype.name = 'abc'; //继承属性

​ // var test = new Test(); //实例化

​ // test.age = 18; //自有属性

​ // console.log('name' in test); //true

​ // console.log(test.hasOwnProperty('name')); //false

​ function Test(){};

​ Test.prototype.name = 'name';

​ var test = new Test();

​ test.age = 18;

​ console.log('name' in test);

​ console.log(test.hasOwnProperty('name'))

​ //对象循环遍历 for in

​ // var obj = {

​ // "name":'fangfang',

​ // id:1,

​ // age:18,

​ // };

​ var obj = {

​ "name":"jy",

​ id:001,

​ age:22,

​ Number:20151306314,

​ grade:99

​ }

​ // for(var key in obj){

​ // console.log(key);

​ // console.log(obj[key]); // obj[key] ===value

​ // };

​ for(var key in obj){

​ // console.log(key)

​ console.log(key,obj[key])

​ }

​ var arr = ['a','b','c','d','e'];

​ for(var i in arr){

​ // console.log(i); //i 索引 0 1 2 3 4 。。。

​ console.log(i,arr[i]); //arr[i] == 'a','b','c'

​ };

​ //数组的属性和方法

​ //for forEach() map()

​ // var arr = ['a','b','c'];

​ // for(var i=0;i<arr.length;i++){

​ // console.log(arr[i]);

​ // };

​ // arr.forEach(function(item,index){ //item = arr[i]

​ // console.log(item)

​ // });

​ // arr.map(function(item,index){ //item = arr[i]

​ // console.log(item)

​ // });

​ var arr = ['x','y','z']

​ for(var i=0;i<arr.length;i++){

​ console.log(i,arr[i])

​ }

​ arr.forEach(function(item,index){

​ console.log(item)

​ })

​ arr.map(function(item,index){

​ console.log(item)

​ })

​ //forEach()没有返回值 map()的区别

​ var arr2 =[100,200,300];

​ // var a = arr2.forEach(function(item,index){ //item = arr[i]

​ // return item+'kg'

​ // });

​ // console.log(a); //undefined forEach()没有返回值

​ var b = arr2.map(function(item,index){ //item = arr[i]

​ return item+'kg'

​ });

​ console.log(b); //[ '100kg', '200kg', '300kg' ]

​ //

​ var arr3 = [{id:1,name:'a1'},{id:2,name:'a2'},{id:3,name:'a3'}];

​ var c = arr3.map(function(item,index){

​ return item.name

​ });

​ console.log(c); //[ 1, 2, 3 ]

​ console.log(arr3) //[ { id: 1, name: 'a1' }, { id: 2, name: 'a2' }, { id: 3, name: 'a3' } ]

​ //[{name:'a1'},{name:'a2'},{name:'a3'}];

​ var d = arr3.map(function(item,index){

​ return {name:item.name}

​ });

​ console.log(d); //[ { name: 'a1' }, { name: 'a2' }, { name: 'a3' } ];

​ //filter() 筛选 返回的满足条件的数组

​ //every() 检测 都满足条件返回true,只要有一个没有满足返回false

​ //some() 检测 如果有一个满足,返回true,没有满足,返回false

​ //数组大于30的值

​ var arr4 = [20,30,50,15,200];

​ var x = arr4.filter(function(item,index){

​ return item >30

​ });

​ console.log(x,arr4); //[ 50, 200 ][ 20, 30, 50, 15, 200 ]

​ var arr3 = [{id:1,name:'a1'},{id:2,name:'a2'},{id:3,name:'a3'}];

​ var x33 = arr3.filter(function(item,index){

​ //return item.name!= 'a1'

​ return item.id>2

​ });

​ console.log(x33,arr3); //[ { id: 2, name: 'a2' }, { id: 3, name: 'a3' } ]

​ //every每一个都要满足条件是&&的关系

​ var arr4 = [20,30,50,15,200];

​ var y= arr4.every(function(item,index){

​ return item >10

​ });

​ console.log(y); //true

​ //some是或的关系,只要有一个满足条件就可以

​ var arr4 = [20,30,50,15,200];

​ var z= arr4.some(function(item,index){ //item 元素 index 索引

​ return item >30

​ });

​ console.log(z); //true

​ //reduce() 累加器

​ // var arr5 = [15,10,15];

​ // var z2 = arr5.reduce(function(total,cur){ //total 每次累加后的结果 cur 当前元素

​ // return total+cur

​ // },5); //5初始化

​ // console.log(z2); //45

​ var arr5 = [10,20,30,40];

​ var z2 = arr5.reduce(function(total,cur){

​ return total+cur

​ }) //不初始化

​ console.log(z2)

​ var arr5 = [10,20,30,40];

​ var z2 = arr5.reduce(function(total,cur){

​ return total+cur

​ }) //不初始化

​ console.log(z2)

​ var obj = {

​ "name":'fangfang',

​ id:1,

​ age:18,

​ arr:[1,2,3],

​ o2:{id:2},

​ action:function(){

​ }

​ };

​ //slice切割

​ var arr1=['a','b'],arr2=arr1.concat();

​ console.log(arr1);//["a","b"]

​ console.log(arr2);//["a","b"]

​ arr2[0]='c';//修改arr2

​ console.log(arr1);//["a","b"]

​ console.log(arr2);//["c","b"]

​ //concat替换

​ var arr = [1,2,3];

​ var arr2 = arr.concat();

​ arr2.push(5);

​ console.log(arr); //[ 1, 2, 3, 5 ]

​ var arr1=['a','b'],arr2=arr1.concat();

​ console.log(arr1);//["a","b"]

​ console.log(arr2);//["a","b"]

​ arr2[0]='c';//修改arr2

​ console.log(arr1);//["a","b"]

​ console.log(arr2);//["c","b"]

​ //序列化 JSON.parse(JSON.stringify(obj)) 对象转换为json字符串

​ var obj = {

​ name:'fangfang',

​ id:1,

​ age:18,

​ o2:{id:2},

​ action:function(){}

​ };

​ var obj3 = JSON.parse(JSON.stringify(obj));

​ obj.o2.id = 999;

​ console.log(obj3);

​ console.log(obj);

// Object.assign()

​ var obj1 = {a:1,b:2};

​ var obj2 = {b:10,c:20};

​ Object.assign(obj1,obj2) ;

​ console.log(obj1); //{ a: 1, b: 10, c: 20 }

​ var obj1 = {a:1,b:2,sub:{c:3}};

​ function f(o2){

​ var o = {};

​ Object.assign(o,o2) ;

​ return o;

​ };

​ var a = f(obj1);

​ obj1.a = 99;

​ a.sub.c = 'aaaaa';

​ console.log(obj1); //{ a: 99, b: 2, sub: { c: 'aaaaa' } }

​ console.log(a); //{ a: 1, b: 2, sub: { c: 'aaaaa' } }

​ //封装一个方法 deep来实现对象的深拷贝 *****

​ var Animal={

​ name: "duobi",

​ skin: ["red", "green"],

​ child: {

​ xxx: "xxx"

​ },

​ say: function(){

​ console.log("I am ", this.name, " skin:", this.skin)

​ }

​ }

​ console.log(Animal)

​ function deep(dest, obj){

​ var o = dest;

​ for (var key in obj) {

​ if (typeof obj[key] === 'object'){

​ o[key] = (obj[key].constructor===Array)?[]:{};

​ deep(o[key], obj[key]);

​ } else {

​ o[key] = obj[key]

​ }

​ }

​ return o;

​ };

​ var x = deep({},Animal);

}

标签:console,log,item,obj,var,封装,拷贝,name
From: https://www.cnblogs.com/jycom/p/16656408.html

相关文章

  • java复制文件的4种方式及拷贝文件到另一个目录下的实例代码
    java复制文件的4种方式及拷贝文件到另一个目录下的实例代码这篇文章主要介绍了java复制文件的4种方式,通过实例带给大家介绍了java拷贝文件到另一个目录下的方法,需要的......
  • 数据的封装过程与网络架构
    1.数据的封装数据封装的过程大致如下(OSI模型):1.用户信息转换为数据,以便在网络上传输2.数据转换为数据段,并在发送方和接收方主机之间建立一条可靠的连接3.数据段转换为数......
  • Python 中的深拷贝和浅拷贝
    一、结论首先说结论:深拷贝出来的对象就是完完全全的新对象,不管是对象本身(id),还是对象中包含的子对象,都和原始对象不一样;浅拷贝出来的对象就是外新内旧的对象,对象本身(id......
  • C# list 分片,对象深拷贝
    ///<summary>///list分片///</summary>///<typeparamname="T"></typeparam>///<paramname="list"></param>......
  • uniapp使用uview封装请求拦截。报错:f is not a function
    uniapp使用微信小程序运行出现以下报错: 报错原因是:你使用的uview组件或api跟uview版本对不上,导致以上报错,解决方案:更换相应的版本即可......
  • go slice的拷贝问题
    首先是深拷贝与浅拷贝的特点浅拷贝实际是拷贝的地址,两个变量将会指向同一个空间,导致修改其中一方另一方也会跟着改变深拷贝则拷贝所有的数据内容在一个新的空间内,这样两......
  • ASEMI快恢复二极管U1M参数,U1M规格,U1M封装
    编辑-ZASEMI快恢复二极管U1M参数:型号:U1M最大重复峰值反向电压(VRRM):1000V最大RMS电桥输入电压(VRMS):800V最大直流阻断电压(VDC):1000V最大平均正向整流输出电流(IF):1.0A峰值......
  • 34 | JAVA集合遍历帮手Iterator(不暴露集合的一种封装)
    IteratorJava的集合类都可以使用foreach循环,List、Set和Queue会迭代每个元素,Map会迭代每个key。以List为例:List<String>list=List.of("Apple","Orange","Pear");f......
  • 大家都能看得懂的源码 - 列表页常见 hook 封装
    本文是深入浅出ahooks源码系列文章的第十六篇,该系列已整理成文档-地址。觉得还不错,给个star支持一下哈,Thanks。列表页常见元素对于一些后台管理系统,典型的列表页包括......
  • Redis使用 Redis封装
    封装Redis:一、application.properties:#过期日期:10800秒(3分钟)PitND.expire.pro=10800二、MainEventHERDMRedis.java:importorg.springframework.beans.facto......