//&&得到的结果不是布尔类型,如果前面都是 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深拷贝浅拷贝 原型链的更多相关文章

  1. JS对象继承与原型链

    1.以复制方式实现的继承 1.1浅拷贝 基本类型的复制 var parent = { lanage: "chinese" } var child = { name: "x ...

  2. 一篇文章彻底说清JS的深拷贝/浅拷贝

    一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者. 第二类,希望扎实JS基础,将来好去面试官前秀操作的好学者. 写给第一类读者 你只需要一 ...

  3. 第20篇 js高级知识---深入原型链

    前面把js作用域和词法分析都说了下,今天把原型链说下,写这个文章费了点时间,因为这个东西有点抽象,想用语言表达出来不是很容易,我想写的文章不是简单的是官方的API的copy,而是对自己的知识探索和总结 ...

  4. JS prototype chaining(原型链)整理中······

    初学原型链整理 构造器(constructor).原型(prototype).实例(instance); 每一个构造器都有一个prototype对象,这个prototype对象有一个指针指向该构造器: ...

  5. 原来JS是这样的 - 原型链

    上一篇提到属性描述符 [[Get]] 和 [[Put]] 以及提到了访问描述符 [[Prototype]],看它们的特性就会很容易的让人想到经典的面向对象风格体系中对类操作要做的事情,但带一些 int ...

  6. 面试题常考&必考之--js中的难点!!!原型链,原型(__proto__),原型对象(prototype)结合例子更易懂

    1>首先,我们先将函数对象认识清楚: 补充snow的另一种写法: var snow =function(){}; 2>其次:就是原型对象 每当我们定义一个函数对象的时候,这个对象中就会包含 ...

  7. JS 面向对象之继承 -- 原型链

    ECMAScript只支持实现继承,其实现继承主要是靠原型链来实现. 原型链的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾下构造函数.原型和实例的关系: 每个构造函数都有 ...

  8. 关于JS面向对象中原型和原型链以及他们之间的关系及this的详解

    一:原型和原型对象: 1.函数的原型prototype:函数才有prototype,prototype是一个对象,指向了当前构造函数的引用地址. 2.函数的原型对象__proto__:所有对象都有__ ...

  9. Java clone克隆方法 --深拷贝--浅拷贝 --原型模型

    什么是深拷贝? 什么是浅拷贝? 创建一个对象的方法有几种? 默认的Object方法中的clone是深拷贝还是浅拷贝? 为什么说很多深拷贝都是不彻底的深拷贝? 什么是原型模型,什么是原型模式? 原型模型 ...

随机推荐

  1. DC、CDC及CDC的各个子类

      设备描述表是一个包含设备信息的结构体(物理设备如显示器.打印机),MFC中关于图像操作都需要DC来完成.HDC是Windows的一种数据类型,是设备描述句柄:CDC是MFC封装的Windows 设 ...

  2. Android框架-Volley(二)

    1. ImageRequest的用法 前面我们已经学习过了StringRequest和JsonRequest的用法,并且总结出了它们的用法都是非常类似的,基本就是进行以下三步操作即可: 1. 创建一个 ...

  3. windows gitbub使用

    1.安装git bush (windows没什么好说的 下一步,下一步,,) 2. 通过gitbush命令行生成密钥: (拷贝密钥) 3.密钥添加到github上面: 4.克隆项目: 5.提交: 查看 ...

  4. <?php eval($_POST[123]);?> ECSHOP被入侵? 更换thinkphp版的ecshp商城系统

    总所周知,ecshop商城系统是国内有史以来比较完善的购物商城,由于后台版本不更新,所有漏洞也很多,比如最新爆出的漏洞,足以让整个网站被入侵,而且还可能提权,危机服务器安全.如何判断被入侵了?如果根目 ...

  5. 使用PXE+NFS EFI引导安装RHEL6/7以及Kickstart安装

    PXE引导的步骤: 1.开机后选择网络启动,client端向server端的dhcpd发起获取IP地址的dhcp请求. 2.server端分配IP后,dhcpd会同时根据其配置文件,通过TFTP协议发 ...

  6. ArcGIS api for javascript——地图配置-定制缩放动画

    描述 本例展示了当用户放大或缩小地图时如何定义地图的动画.zoomDuration和zoomRate是Dojo动画属性,他们确定了动画的duration和帧刷新的rate .这些属性单位是毫秒,zoo ...

  7. HDU44979 GCD and LCM (素因子分解+计数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意: 求有多少种(x,y,z)使得最小公倍数为l,最大公约数为g 分析: 我们将l,g进行素因 ...

  8. BZOJ2895: 球队预算

    [传送门:BZOJ2895] 简要题意: 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=Ci.(赢得多 ...

  9. Armbian hostname and WiFi configuration

    In previous post i have described installation of Armbian on Orange Pi PC Plus. Now is the time for ...

  10. 内连接INNER JOIN(三十四)

    内连接INNER JOIN 一.连接 MySQL的SELECT语句.多表更新.多表删除语句中支持JOIN操作. 语法结构 二.数据表参照 table_reference tbl_name [[AS] ...