最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 前端学习笔记(二)

    正文概述 掘金(oyishyi)   2020-12-27   373

    今天《JS高级程序设计》和《DOM编程艺术》两本书到了,开始看书。

    1.对“在构造函数中定义属性,在原型中定义方法“的理解

    1.在原型中定义方法很容易理解,只要理解原型链就能理解。

    2.但是属性要在构造函数中定义有什么好处呢?MDN没解释。

    查了网上很多资料,都在胡说八道。

    于是查了查js高级程序设计,找到了原因。

    不是因为属性在构造函数中定义有好处,而是因为部分属性在原型上定义会有坏处。而这指的就是引用值属性,比如说数组。

    假设我们有一个构造函数Person,是这样的↓

    let Person = function() {};
    Person.prototype.name = '魔礼青';
    Person.prototype.friends = ['魔礼寿', '魔力红', '魔礼海'];
    

    然后我们实例化两个魔礼青

    let Person1 = new Person();
    let Person2 = new Person();
    

    现在自然没有什么问题,你可以通过给name属性赋值更改默认的魔礼青这个名字,以下代码↓

    Person2.name = '莫里森';
    

    以上代码后,Person2变成了莫里森,Person1不受影响还是魔礼青,这没问题。

    但是friends属性的更改就会有问题。比如以下代码↓

    Person1.friends.push('魔理沙');
    

    现在问题出现了,由于friends是在prototype里定义的,所以这个push会同时影响到两个人。这样子莫里森和魔礼青都有个friend叫魔理沙了。前端学习笔记(二)

    因此我们要在构造函数里定义属性,或者说不要在原型里定义引用属性。

    2.MDN教程教的是寄生式组合继承,是继承的最佳方式

    MDN和JS书上有一行有区别:

    MDN上是Teacher.prototype = Object.create(Person.prototype);

    书上是Teacher.prototype = new Person();

    都可以,只是如果按照书上的来,Teacher.prototype自带Person里那些属性(值为undefined),这样做可以,但是我觉得这违反了“属性最好写在构造函数里”的原则(虽然这不会发生上面的引用错误,因为每次实例化的时候这些属性都会用Person构造函数实例化一遍,覆盖掉原型的属性)。所以还是按照MDN的来。如果浏览器不支持create(),可以用书上的来。

    前端学习笔记(二)
    ↑不会有问题,只要你不主动给Person.prototype和Teacher.prototype加上引用属性。

    (顺便此时有Student.prototype.__proto__ === Person.prototype

    下面一张图表示我对继承关系原型链的理解

    前端学习笔记(二)

    3.提升

    突然提到提升,去学习了一下。大概是这样:

    先提升变量的声明(var定义的),赋值不提升还在原处。原来的Var a = 1;会变成a = 1;, 然后作用域最顶端处声明这个变量。

    函数也会提升,也是最顶端,但是在提升后的变量的下面。

    4.JSON

    4.1 用XHR读取JSON:

    ①new一个XHR对象

    ②初始化,request.open();

    ③声明返回类型,request.responseType = "json";

    ④发送请求,request.send();

    ⑤通过requese.onload = function() {/*数据处理语句*/},当请求返回成功时,运行函数里的语句。

    4.2 JSON类型和字符串互换

    由于JSON太普及了,浏览器内建了一个JSON对象,可以调用两个方法

    JSON.parse(/*JSON格式的字符串文本*/) 把字符串转换成json对象,当然格式要对。

    JSON.stringify(/*JSON对象*/) 把对象转换成字符串。


    起源地下载网 » 前端学习笔记(二)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元