面试题-沉香救母-对象篇

从前有个书生叫刘彦昌(也有叫刘向),上京赶考时,顺道登华山一游。华山上有一座神庙,庙神三圣母(也叫华岳三娘) 是玉帝的外甥女,二郎神的妹妹。她美丽善良多情,自从被王母派遣到华山后,一直过着孤独寂寞的生活。这天,她正在庙中吟歌漫舞,消磨时光,突然发现一个书生跨进了庙门。她急忙登上莲花宝座,化为一尊塑像。走进大殿的刘向,一眼就看到了三娘的塑像俊丽、温柔、安闲,刘向被深深吸引住了,心想要是能娶她做妻子该多幸福啊!可惜这只是一尊没有情感知觉的雕像。刘向怀着深深的遗憾,抑制不住内心的激动,取出笔墨,深情地在墙上抒写了自己对三娘的爱慕之情。

三娘默默地看着这一切,心中不禁百感交集。面前这个书生多么英俊倜傥,文采斐然,他对自己满怀深情,而自己又何尝不被他深深吸引,又何尝不爱恋他呢?可是,一个是上界仙女,一个是下方凡人,又哪能缔结姻缘呢?目送怅怅离去又依依不舍的刘向,三娘再也不能平静了。她沉吟再三,终于决定不顾天条禁令,要与刘向结为夫妻。于是,三娘便化为一民间女子,追上刘向,向他道出了真情,从此后二人两情依依,结为伉俪,恩爱无比。刘向考期将临,三娘已有孕在身,依依惜别之时,刘向赠给三娘一块祖传沉香,说日后生子可以"沉香"为名。二人十八里相送,难舍难分。

刘向在京城一举中榜,被任命为扬州府巡按。就在他走马上任之时,华岳三娘却遭难了。原来,这时正值王母娘娘生日,在天宫大办蟠桃会,各路神仙均来赴会祝寿,可是三娘有孕在身,便推脱染病而留在华山。谁知,真情被三娘的哥哥二郎神知道了,二郎神勃然大怒,责怪妹妹私嫁凡人,触犯天条律令,要捉她上天受惩罚。三娘一身正气,毫不畏惧,况且她随身还有一件王母赠的宝物-宝莲灯,此物是三娘的镇山之宝,无论哪路妖魔,哪方神仙,只要宝莲灯大放异彩,都会被震慑称服,束手就擒的。二郎神自知不敌,就令自己的天犬乘三娘休息之际,将宝莲灯偷盗而去。这样,可怜的三娘就被二郎神压在华山下的黑云洞中。三娘在暗无天日的洞中生下了儿子沉香,为防不测,她偷偷恳求夜叉,将儿子送到扬州,留在其父刘向身边。

沉香长大后,渐渐懂事了,知道了母亲被压在华山下受苦,就一心想救出母亲三娘。他把想法对父亲说了,无奈刘向也只是一介文弱书生,只有叹气摇头。于是沉香便独自离家,去找母亲。他吃尽了千辛万苦,终于走到了华山。可是母亲在哪里呢?这个只有八岁的孩子,不知所措,放声大哭起来。凄厉痛苦的哭喊声,在空谷回荡,惊动了路过此地的霹雳大仙。好心的大仙,问明情由,深为善良的三娘和苦命的孩子鸣不平,可是却也无可奈何。于是他将沉香带回自己的洞府。沉香在大仙的指点下,刻苦认真的学习本领,渐渐学会了百般武艺。十六岁生日那天,沉香向师父辞行,要去华山救母。大仙念他人小有志气,赠给他一柄萱花开山神斧。

沉香腾云驾雾,来到华山黑云洞前。他大声呼唤娘亲,声音穿透重重岩层,传入三娘耳中。三娘不由心情激荡,百感在心。她知儿子已长大成人,一片孝心来救自己,激动不已,就将沉香唤到洞前。三娘自知哥哥二郎神神通广大,当年大闹天宫的孙悟空也败在他手中;沉香又年幼,况且二郎神还盗去了宝莲灯,儿子哪能是他对手呢?所以,三娘叫沉香去向舅舅求情。

沉香飞身来到二郎庙,向二郎神苦苦哀求。谁知二郎神铁石心肠,不但不肯放出三娘,反而舞起三尖两刃刀,叫嚣道:

"你若打赢我,我便放了你母亲。"

尖刃处芒光一闪,下一刻,刀尖便飞至沉香额头处,沉香身型一沉,抡起神斧,挡下了这一击,斧口在晃动,连带沉香后退了几步。

仅凭力量就能占据上风,这,就是二郎神-杨戬。

沉香思考片刻,决定主动出击,看招。

"js中的对象最主要的就属性,而属性分两类,一为自有属性,二为继承属性。

而我们可以通过两个东西去看待对象,一为构造器,二为原型对象(后面简称原型)。

构造器中会定义对象的属性,比如变量、方法等,作为自由属性。

而对象会将其原型上的属性继承过来,作为继承属性"

js 复制代码
class father{
    // 构造器,里面定义了自有属性
    constructor(name){
        this.name = name
    }
}
// 通过prototype可以访问原型,并设置原型
// fater会继承原型的变量sex
father.prototype.sex = 'man'

沉香飞至杨戬身前,不断挥舞起神斧,均裂之势骤然迸发。

杨戬不屑的歪了下嘴角,手中的三尖两刃刀如臂指使,他,也开始挥舞起来。

"dang",每挥一次,刀尖都能精准的击退神斧,而且游刃有余。

这便是二郎神的'技'。

"哼" 沉香再次发力

js创建一个对象有三种方法,且无论如何都围绕着构造器和原型来创建

  1. 第一种:字面量创建

    js 复制代码
    let obj = {name:'1'}

    这种创建方式默认调用了js内置的Object,而这个Object是一个构造函数,诸位可以按下面去理解

    js 复制代码
    function Object(name){
        this.name = name
    }
    • 字面量创建的所有对象的原型都是Object这个构造函数的原型

    • js里的函数都是对象,所以Object也有原型,我们可以通过Object.prototype来访问Object的原型

    • 这个原型有很多对象的属性,比如toString、valueOf等

    • 而这个原型是js内置的,也是一个对象,所以它也有原型,而这个原型是null,面试题之一

    • 原型链的尽头是null

    • 访问一个对象的原型最正统的方式是Object.getProtoTypeOf(obj)

斧子的刃处泛起了紫光,沉重一挥,犀利的紫光脱离斧刃,形成紫色光刃,向杨戬飞去。

杨戬身型闪烁,光刃飞出天际,无伤。

  1. 第二种:new关键字创建对象

    js 复制代码
      let obj = new Object({name:'1'})
    • new后要跟着一个构造函数,而Object便是内置的构造函数

    • Object接受参数,构造出自有属性

    • 通过new创建的对象的原型即构造函数的原型

第二道光刃离斧即闪,宛若凭空出现自杨戬目前。

三尖两刃刀轻轻一挑,光刃即刻消散,仿佛未曾不存在一般。

"就这?"

  1. 第三种:Object.create()

    js 复制代码
      let obj = Object.create({name:'1'})
    • Object.create()接受一个对象,其作为创建出来的对象的原型。

    • 即obj的原型是{name:'1'},而不是Object这个构造函数的原型

    • 而obj本身没有自有属性

金光沾满了整个斧子,沉香沉斧蓄力,斧刃处的金光随着时间越来越亮眼芒,待光芒到达临界值,沉香一挥,满斧金光倾斜而出,光刃占满半边天空,所过之处,空间隐隐波动。

"有点东西"

二郎神虚空一握,光刃中心凭空出现一只紫金色的手,硬生生捏爆了光刃。 漫天的金光衬托出二郎神的强大。

沉香加快了呼吸,尽管神斧在手,但这三次攻击着实消耗了不少神力。

"小子,吃我一招"

二郎神身型一闪,瞬息而至,伴随而来的还有无坚不摧的三尖两刃刀。

沉香举起斧头一挡,碰撞处,一阵能量破发,沉香被震飞,直撞一座山头,深陷其中,内脏翻涌,一口鲜血夺口而出。

"咳..."

"咳..."

"咳..."

沉香闭上了双眼

对象的每个属性都有一个用来描述该属性的对象,又称属性描述

js 复制代码
let obj = {name:'1'}

通过Object.getOwnPropertyDescriptor(obj,'name')可以访问obj中name的属性描述符

js 复制代码
{
  configurable: true,
  enumerable: true,
  value: "1",
  writable: true,
}

二郎神没有给他喘息的机会,携着三尖两刃刀再次突脸,直接刺了过去。

当刀尖和斧刃接触的瞬间。

writable为true时,这个属性obj.name可以修改,false则不可修改

神斧发出了鲜红的光芒,带着沉香旋转了起来,一声龙吼,二郎神被震开了,虎口竟生疼。

"嗯?有点东西,再来"

二郎神当头一劈

value即这个属性obj.name的值

"dang"

沉香再次旋转起来,又一声龙吼,二郎神被震的更远了,整条手臂竟然颤抖起来了

二郎神多少有点不悦了,

三尖两刃刀发出了神器该有的神光,一击蓄力上挑,

对象的属性有一些可枚举,另一些不可枚举,Object.keys(obj)方法就是为了获取obj中所有的可枚举的属性,包括 for (const key in object)遍历方式也是获取可枚举的属性。

而决定对象的属性是否可以枚举取决于属性描述器里的enumerable是否为true

即便enumerable:false,我们依旧能访问该属性obj.name

"dang"

神斧的鲜红越来深邃,仿佛要滴出来一般,仿佛在和三尖两刃刀回击道:谁还不是个神器了。

沉香旋转起来,一声传神的龙吼,杨戬被震飞了,虎口竟出血了。

身为天庭的武强之仙,竟被一个小辈给伤到,杨戬恼羞成怒了,

单手高举手中的三尖两刃刀至肩上,与首同高,往后蓄力,法相天地凝聚,神力凝成的千丈长戟裹挟着二郎器的武器,长戟所在的空间承受不住这般力量,开始了坍塌。

长戟瞬息脱手,飞向沉香,仿佛要贯穿了这方天地。

通过Object.defineProperty(),我们可以修改属性的属性描述符

js 复制代码
Object.defineProperty(obj, 'name', { writable: false })

修改了name属性的writable:false,这样就不能修改name的值了

但上面的操作只有当属性描述符的configurable:true才可以,configurable决定属性描述符里的configurable、enumrable、writable是否可以被修改(更细节的得看犀牛书此处)

"dang"

沉香再次旋转起来,一声沉重的龙吼,刀光之间,没能击退长戟。

"dang"

又一声龙吼,依旧没能击退。

就这样,沉香不断旋转,却被长戟不断击退。

"dang"的声响不断,场面声势浩大,惊扰到了四位大仙。

尽管神斧扛得住,但沉香的身体却快撑不住了,握着神斧的两条手臂上血管爆裂,染得一双鲜红修罗手,渗血的眼睛里不知道是愤怒还是救母心切、亦或是拼命。

"叮"

神斧被震飞出去了,砸在了山头,竟是将山体一分为二。

沉香面对着漫天的神光,眼前的长戟在他眼里无限放大,戟尖上的光芒仿佛要贯穿它的肉体和精神。

似乎没能贯穿他拯救母亲的渴望,他双手握住戟尖,光是刮起的风就能切割他的皮肤,带出丝丝鲜血。

双手处更是血肉模糊,但沉香依旧坚持着,他必须打败二郎神,救出母亲。

眼看戟尖离额头越来越近,沉香就越发绝望。

戟尖刺破了额头的皮肤,下一刻便会贯穿他的头颅。

他闭上了眼睛,而一道彩光率先射入了沉香的额头

对象的属性分为两类

  1. 一类是数据属性,它的属性描述符为{writable:true,enumrable:true,configurable:true,value:值}

    js 复制代码
    let obj = {name:1}
    js 复制代码
    let obj = {name:{writable:true,enumrable:true,configurable:true,value:1}}
    js 复制代码
    let obj = {}
    Object.definedProperty(obj,'name',{writable:true,enumrable:true,configurable:true,value:1})

    上面这三种方式创建的属性都是数据属性

  2. 另一类是存取器属性,他的属性描述符为

    js 复制代码
    {
        get:function(){},
        set:function(){},
        enumerable:true,
        configurable:true
    }
    js 复制代码
    let obj = {
      name:{
        get:function(){
          return 1
        },
        set:function(name){
            this.name = name + '1'
        },
        enumerable:true,
        configurable:true
      }
    }

    当访问obj.name时,便会触发get,并将函数的返回值作为属性的值

    当设置obi.name时,便会触发set,并将函数的返回值作为属性的值

    而这个set和get就是vue框架数据响应式实现的根基

戟尖没再能深入半分,一只神光凝聚的大手牢牢地握住了千丈长的长戟的戟柄。

此刻,一个千丈高的法相天地挡在了沉香的前面,而这法相天地的模样竟和沉香有着七分相似。

"喝"

神斧应声遁出,在空中化为点点神光,汇聚在法相天地身前,凝聚成了千丈大的巨斧。

法相天地挥舞起神斧,展现出了战天斗地的意志,一条龙型神波,直奔杨戬。

神龙的身型在二郎神眼中不断放大,二郎神的法相天地直接一声咆哮,手中的长戟化身成了一条神犬,直冲神龙。

在两者相碰的瞬间,天地寂灭,时间仿佛在此刻停顿了下来。

...

...

...

下一刻,无尽的白光喷射而出,一道身影斜飞下底面,在地下轰出一个百丈的巨坑。

此人竟是二郎神-杨戬。

之前飞入沉香额头的神光是四仙姑所为,四仙姑实在不忍二郎神如此欺负一个后辈。

有了这股力量,沉香自己就能劈开华山,法相天地一斧子把华山劈开了,救出了母亲。整整十六年,受尽了苦难的三娘才重见天日,她与儿子紧紧抱在一起,百感交集,泪流满面。

相关推荐
崔庆才丨静觅6 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60617 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了7 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅7 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅8 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment8 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅8 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊8 小时前
jwt介绍
前端