Javascript 进阶 4-12 章节总结测验

Example 1

以下物件格式是否正确? 如果不正确请调整为正确格式
执行物件中的两个函式

错误修正

var person = {    name: '小明',    age: 32,    1: '2',    gender: 'male',    'interests': ['吃饭', '睡觉', '打电动'],    greeting: function () {        console.log('哈搂,你好');    },    '哈搂': function () {        console.log('我是小明');    }};

要判断是否为正确的话,可以使用console.log把东西印出来,如果印的出来就代表格式是正确的喔!

console.log(person); 

http://img2.58codes.com/2024/20121770oUHmaqR7Sa.png

可见得我们在物件中可以使用中文字串以及数字当作是属性的开头名称喔!

如何执行物件中的两个函式?

person.greeting();person['哈搂']();

Example 2

运用以下阵列及 for 迴圈刑事,执行上面的函式

var person = {    name: '小明',    age: 32,    1: '2',    gender: 'male',    'interests': ['吃饭', '睡觉', '打电动'],    greeting: function () {        console.log('哈搂,你好');    },    '哈搂': function () {        console.log('我是小明');    }};var personMethod = ['greeting', '哈搂'];

实作

for (var i = 0; i < personMethod.length; i++){    console.log(personMethod[i]); // greeting | 哈搂        person[personMethod[i]](); // 执行    }

Example 3

说明最终结果,并解释其流程

function changeName(data) {    data.name = '杰伦家';    return data;}var family = {    deposit: 100000,    name: '小明家',    members: {        father: '老爸',        mom: '老妈',        ming: '小明'    }};var family2 = jQuery.extend({}, changeName(family));family2.members.jay = '杰伦';console.log('family.name', family.name);console.log('family.members.jay', family.members.jay);console.log(family === family2);console.log(family.members === family2.members);

实际执行流程

我们先用 excel 表说明参考

function changeName(data) {    data.name = '杰伦家';    return data;}var family = {    deposit: 100000,    name: '小明家',    members: {        father: '老爸',        mom: '老妈',        ming: '小明'    }};

http://img2.58codes.com/2024/20121770JVgu8IyLg4.png

到这里应该没有问题,再来我们来看看

var family2 = jQuery.extend({}, changeName(family));

看到这段你会想说~! jQuery.extend 是浅层複製,没错,所以members的参考位置其实还是 0x02。

但在这之前还得注意 changeName(family),当函式传入的参数是物件的时候,这个传的还是物件的参考,也就是说这里函式接收到的 data 是 family 的 0x01参考位置,所以在函式内修改的话,外部的物件也会跟着做更动。

http://img2.58codes.com/2024/20121770ntnWbxK64D.png

之后 return 把这个 data物件传回来的时候,也是使用传参考的方式喔!

再来才是浅拷贝的部分~ 直接拷贝了0x01 的内容并存放于新的记忆体空间 0x03

不过如果更动其中的members的话,该物件参考的位置还是 0x02,所以 0x01 的memmbers的内容也会跟着做改变喔!

family2.members.jay = '杰伦';

http://img2.58codes.com/2024/20121770dF6qw6PjNk.png

所以依照这个结构,就可以得出答案是

http://img2.58codes.com/2024/20121770V329E4jqom.png

我们再把两个family印出来看看

http://img2.58codes.com/2024/20121770zC0hrjFTuz.png

虽然看起来一样,但其实两个物件是参考了不同的记忆体位置,不过其中的 members 物件都是参照了同一个记忆体位置喔!

如果没有问题的话~就可以继续往下一篇文章的题目进行练习噜~汪汪


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章