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是深拷贝还是浅拷贝? 为什么说很多深拷贝都是不彻底的深拷贝? 什么是原型模型,什么是原型模式? 原型模型 ...
随机推荐
- 【转】Android ClearEditText:输入用户名、密码错误时整体删除及输入为空时候晃动提示
1 package com.lixu.clearedittext; 2 3 4 import android.app.Activity; 5 import android.os.Bundle; 6 i ...
- 200 from memory cache / from disk cache / 304 Not Modified 区别
三者情况有什么区别和联系,什么情况下会发生200 from memory cache 或 200 from disk cache 或 304 Not Modified? 200 from memory ...
- sql 的几种常用方法
第一个项目总结基类:database:主要是定义有关数据库的方法: 1.打开数据库 public static void Open() { ( "server=.\\sqlexpress;d ...
- PostgreSQL Replication之第九章 与pgpool一起工作(2)
9.2 理解pgpool的功能 pgpool提供了如下功能: •连接池 •语句级别的复制 •负载均衡 •限制连接 •内存缓存 •并行查询 [当决定使用那些功能的时候,记住并非所有的功能可以在同一时间使 ...
- highGUI图形用户界面
#include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> using namespace ...
- caioj 1083 动态规划入门(非常规DP7:零件分组)(LIS)
这道题题目给的顺序不是固定的 所以一开始要自己排序,按照w来排序 后来只要看l就可以了 然后求最长下降子序列即可(根据那个神奇的定理,LIS模板里有提到) #include<cstdio> ...
- WPF模仿QQ登录按钮
原文:WPF模仿QQ登录按钮 如下图,第一张是未点击时按钮样式,第二张是鼠标划过时按钮样式. 样式代码: <Style TargetType="{x:Type Button}" ...
- 【转】NPOI使用手册
[转]NPOI使用手册 NPOI使用手册 目录 1.认识NPOI 2. 使用NPOI生成xls文件 2.1 创建基本内容 2.1.1创建Workbook和Sheet 2.1.2创建DocumentSu ...
- 洛谷 P1542 包裹快递
P1542 包裹快递 题目描述 小K成功地破解了密文.但是乘车到X国的时候,发现钱包被偷了,于是无奈之下只好作快递员来攒足路费去Orz教主…… 一个快递公司要将n个包裹分别送到n个地方,并分配给邮递员 ...
- ArcGIS api for javascript——地图配置-定制平移动画
描述 本例展示了当用户点击平移按钮时如何定制地图的动画.panDuration和panRate是Dojo动画属性,可以分别确定动画的duration和帧刷新的rate.这些属性的单位都是毫秒,panD ...