js---15深拷贝浅拷贝 原型链
//&&得到的结果不是布尔类型,如果前面都是 true就执行最后一个,并返回最后一个表达式的值,前面有一个为false,后面不执行,返回前面表达式的值
var a = 3;
var b = a && (a = 4);
console.log(b);//
var b = a && (a ++);
console.log(a);//
console.log(b);//
a && (a ++);
console.log(a);// var c = 0;
var d = c && a++;
console.log(a);//
console.log(d);// var c = 0;
var d = b && c && a++;
console.log(a);//
console.log(d);// var c = false;
var d = b && c && a++;
console.log(a);//
console.log(d);//false // || 前面是true,后面不执行,返回前面表达式值。前面是false,返回后面表达式的值
var a1 = 3;
var b1 = a1 || a1++;
console.log(a1);//
console.log(b1);// var a1 = 0;
var b1 = a1 || a1++;
console.log(a1);//
console.log(b1);// ====================================================================
//浅拷贝,指向同一个内存区域
var person ={
name:"cj",
age:22,
address:{
home:"home address",
office:"office address" },
schools:["xiaoxue","daxue"]
};
var programer = {
language:"javascript"
};
//全部复制
function extend (p,c) {
var c = c ||{}; //如果c是undefined或者null,就是{}
for(var prop in p){
c[prop] = p[prop];//如果有属性值是对象,则是把地址复制过去了,
}
}
extend(person,programer);
console.log(programer.address);//{home: "home address", office: "office address"}
console.log(programer.address.home);//home address
console.log(programer.schools);//["xiaoxue", "daxue"]
programer.name = "sss";
console.log(person.name);//cj
programer.address.name = "xxx";
console.log(person.address.name);//xxx
programer.schools[0] = "iii";
console.log(person.schools[0]);//iii
console.log(person.schools[0]);//iii =====================================================
//深拷贝,跟父类没关系了
function extendDeeply(p,c){//from --> to
var c = c|| {};
for(var prop in p){//{}形式的对象可以用for in循环,prop是key,p[prop]是每一个value。json和数组都可以用for in循环,数组时候prop是0,,1,2,3,json时候prop是key
if(typeof p[prop] === "object"){
c[prop] = (p[prop].constructor ===Array)?[]:{};//c[address]={}
extendDeeply(p[prop],c[prop]);//p[address],c[address] }else{
c[prop] = p[prop];//给c新增一个key和value,c[address][home]=p[address][home]
} }
} ================================================================
function Parent(){
this.name = "abc";
this.address = {home:"home"};
}
function Child(){//可以看成类,对象,构造函数,函数执行是相当于构造函数执行但是要return function才产生对象。
Parent.call(this);//this就有了Parent的属性了,深拷贝
this.language = "java";
}
var c = new Child();
c.address.home = "ssss"
var p = new Parent();
console.log(p.address.home);//home
=================================================================
//原型链;java里面的继承关系,一直找到Object类去
var p ={name:"cj"};
function myCreate(p){
var ins ;
function F(){};
F.prototype = p;//函数的原型指向p对象,函数公有区域指向p对象,所以ins.__proto__指向p对象,就实现了继承。
ins = new F();
return ins ;
}
//对象的__proto__ 指向的是
//对象的构造器constructor
//的原型对象(prototype) //但原型对象并不是能用上面的话来说明
//原型对象的__proto__指向的是Object得prototype
//而不是指向
//其(Object.prototype)构造器constructor ==某个函数
//的原型对象

function FF(){};
var ff = new FF(){};
ff.__proto__ === FF.prototype;//true
ff.__proto__ === ff.constructor.prototype; //true
FF.prototype.__proto__ ===FF.prototype.constructor.prototype; //false

js---15深拷贝浅拷贝 原型链的更多相关文章
- JS对象继承与原型链
1.以复制方式实现的继承 1.1浅拷贝 基本类型的复制 var parent = { lanage: "chinese" } var child = { name: "x ...
- 一篇文章彻底说清JS的深拷贝/浅拷贝
一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者. 第二类,希望扎实JS基础,将来好去面试官前秀操作的好学者. 写给第一类读者 你只需要一 ...
- 第20篇 js高级知识---深入原型链
前面把js作用域和词法分析都说了下,今天把原型链说下,写这个文章费了点时间,因为这个东西有点抽象,想用语言表达出来不是很容易,我想写的文章不是简单的是官方的API的copy,而是对自己的知识探索和总结 ...
- JS prototype chaining(原型链)整理中······
初学原型链整理 构造器(constructor).原型(prototype).实例(instance); 每一个构造器都有一个prototype对象,这个prototype对象有一个指针指向该构造器: ...
- 原来JS是这样的 - 原型链
上一篇提到属性描述符 [[Get]] 和 [[Put]] 以及提到了访问描述符 [[Prototype]],看它们的特性就会很容易的让人想到经典的面向对象风格体系中对类操作要做的事情,但带一些 int ...
- 面试题常考&必考之--js中的难点!!!原型链,原型(__proto__),原型对象(prototype)结合例子更易懂
1>首先,我们先将函数对象认识清楚: 补充snow的另一种写法: var snow =function(){}; 2>其次:就是原型对象 每当我们定义一个函数对象的时候,这个对象中就会包含 ...
- JS 面向对象之继承 -- 原型链
ECMAScript只支持实现继承,其实现继承主要是靠原型链来实现. 原型链的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾下构造函数.原型和实例的关系: 每个构造函数都有 ...
- 关于JS面向对象中原型和原型链以及他们之间的关系及this的详解
一:原型和原型对象: 1.函数的原型prototype:函数才有prototype,prototype是一个对象,指向了当前构造函数的引用地址. 2.函数的原型对象__proto__:所有对象都有__ ...
- Java clone克隆方法 --深拷贝--浅拷贝 --原型模型
什么是深拷贝? 什么是浅拷贝? 创建一个对象的方法有几种? 默认的Object方法中的clone是深拷贝还是浅拷贝? 为什么说很多深拷贝都是不彻底的深拷贝? 什么是原型模型,什么是原型模式? 原型模型 ...
随机推荐
- kafka集群安装配置
1.下载安装包 2.解压安装包 3.进入到kafka的config目录修改server.properties文件 进入后显示如下: 修改log.dirs,基本上大部分都是默认配置 kafka依赖zoo ...
- 集合HashSet的使用
集合中的HashSet底层是通过Hash表实现,HashSet的特点是元素唯一,但用到Hash表就跟hashCode()有了密不可分的联系,所以HashSet的唯一性是通过hashCode()方法来保 ...
- 请问这个git上开源的node项目怎样才能在windows用Npm跑起来
这个项目https://github.com/wechaty/we...以前都是用人家弄好的手脚架搞得es6,搞了2天搞起了es6还报错,错误信息在下面,然后我想请教大神:1我到底应该怎么弄才能在wi ...
- decision tree 决策树(一)
一 决策树 原理:分类决策树模型是一种描述对实例进行分类的树形结构.决策树由结点(node)和有向边(directed edge)组成.结点有两种类型:内部结点(internal node)和叶结点( ...
- 超轻便的 Cache_Lite 文件缓存
Cache_Lite提供了快速,轻便和安全的缓存系统.它针对文件容器进行了优化,并且防止缓存损坏(因为它使用文件锁定和/或散列测试). 个人感觉还是挺方便的. Cache_Lite 官方参考地址. C ...
- CF817F MEX Queries(线段树上二分)
题意 维护一个01串,一开始全部都是0 3种操作 1.把一个区间都变为1 2.把一个区间都变为0 3.把一个区间的所有数字翻转过来 每次操作完成之后询问区间最小的0的位置 l,r<=10^18 ...
- POJ 3539 Elevator(同余类BFS)
题意 有一部电梯,最初停在1层. 电梯有4个按键,上升a,b,c层,回到一层. 求从一层出发.能到达1~h的哪些楼层. (h<=1018,a,b,c<=105) 题解 这种h能大的图论,一 ...
- 【Henu ACM Round#20 B】Contest
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 根据时间和原分数. 算出对应的分数就可以了. [代码] #include <bits/stdc++.h> using n ...
- vector容器的实现
简单实现了构造.析构.push_back.pop_back.operator=.operator[].clear等函数 template<class T> class my_vector ...
- 理解ThreadLocal类
1 ThreadLocal是什么 早在JDK 1.2的版本号中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路. 使用这个工具类能够 ...