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是深拷贝还是浅拷贝? 为什么说很多深拷贝都是不彻底的深拷贝? 什么是原型模型,什么是原型模式? 原型模型 ...
随机推荐
- Layout Team
The layout team is a long-term engineering team tasked with maintaining, supporting, and improving t ...
- iOS开发——剪切板
剪切板的调用是很简单的,常用的就这两个,不管文字或是图片的粘贴复制,对剪切板的操作就是基于下面两个属性的: [UIPasteboard generalPasteboard].string [UIPas ...
- d3碰撞源码分析
技术 d3. d3.force.d3.geom.quadtree. d3.geom.quadtree 四叉树的应用:图像处理.空间数据索引.2D中的快速碰撞检测.存储稀疏数据等,游戏编程. 上图中的数 ...
- bzoj1922 [SDOI2010]大陆争霸 分层图
问题描述 幻想历8012年5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举 ...
- Java Web Application——servlet
概述 是一个部署于web服务器中的实现了servlet接口的Java类,用于响应web请求 Web容器(也称为servlet容器)本质上是与servlet交互的Web服务器的组件.Web容器负责管理s ...
- minixml的安装教程
最近想要实现对xml的解析,上网看到有很多库可以直接调用,例如minixml,tinyxml等,我选择了minixml(没有原因,纯属是因为这个找到了中文文档- -) 附上中文文档链接:https:/ ...
- C++模板中重要的术语
- C#文件拖放至窗口的ListView控件获取文件类型
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- iOS App 上架流程
iPhone App 上架流程 1. 申请 App ID (1) 连到 Devel ...
- Broadleaf电商系统开发(一) - Broadleaf介绍
Broadleaf Commerce 是一个开源的 Java 电子商务平台,基于 Spring 框架开发.提供一个可靠.可扩展的架构,可进行深度的定制和高速开发. Broadleaf Commerce ...