• JavaScript进阶之路(一)初学者的开始


    一:写在前面的问题和话

    一个javascript初学者的进阶之路!

    背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般。学习资料:犀牛书。

    如有误导,或者错误的地方,欢迎大神在评论区说明,指正。不接受无端的漫骂!!!!

    二:正文 Javascript的面向对象

    面向对象:封装,继承,多态。

    上面先不说,我们学习后端语言的时候,老师都会告诉我们,对象是什么,比如,老师会说,对象你可以理解成为你的女朋友(对象),你女朋友的年龄,名字,职业,罩杯都是他的属性。

    比如这段代码:

    1. public class Person
    2. {
    3. public string Name { get; set; }
    4. public int Age { get; set; }
    5. public string Cup { get; set; }
    6. }

    那么JavaScript里面的对象是什么呢?

    1. //方式1
    2. var person = new object();
    3. person.name='柳岩';
    4. person.age= 27;
    5. person.Cup='17D';
    6. //方式2
    7. var person={
    8. name:'柳岩',
    9. age:27,
    10. Cup:'17D'
    11. };

    这是JavaScript创建对象最简单的方式,也是我们后端人员最常用的创建对象的方式。

    这个时候,项目经理提要求了,我不管,名字必须只读,不可修改。在C#中可以通过只给属性get方法或者给字段readonly等方法来实现只读。JS怎么办呢?

    1. var person = {
    2. name: '柳岩',
    3. age: 27,
    4. Cup: '17D'
    5. };
    6. Object.defineProperty(person, "name", {
    7. writable: false
    8. });
    9. person.name = "春哥";
    10. console.log(person.name);

    这样就实现了属性的只读。顺带说一句,这个方法IE8以下无效。IE8也有很多限制。如果遇到移动项目,大可以这么写。如果是其他需要兼容低版本浏览器的项目,咱们还是老老实实的约定一下,写个注释算了。毕竟不是特别重要的东西。

    当然也可以用get;set;来写,同样不支持IE8及以下。

    我就随便瞎写一下,反正就是这个意思,大家明白就行。勿喷勿喷。

    上面就是Javascript的对象,以及创建对象最简单的2种方式。接下来说说实际应用中是怎么创建对象,还有那些方式可以创建对象

    1:最常用的模式

    1. var Person = function (name,age,cup) {
    2. this.name = name;
    3. this.age = age;
    4. this.cup = cup;
    5. this.showCup = function () {
    6. console.log(this.name + ":" + this.cup);
    7. };
    8. };
    9. var liuyan = new Person("柳岩", 27, "17D");
    10. liuyan.showCup();

    讲道理,上面的模式很眼熟,这不就是C#中创建对象的方式么,还是3个参的构造函数!所以这种方式(构造函数)大概是实际应用中最常见的形式。

    2:不常用?的模式

    原型模式:

    1. var Person = function () { };
    2. Person.prototype.name = "柳岩";
    3. Person.prototype.age = "27";
    4. Person.prototype.cup = "17D";
    5. Person.prototype.showCup = function () {
    6. console.log(this.name + ":" + this.cup);
    7. };
    8. var liuyan = new Person();
    9. liuyan.showCup();

    好了,到这为止我们需要了解以下原型到底是个啥。

    先记住下面两句话

    a:原型就是你创建一个新函数,这个函数就会自动创建一个prototype属性,这个属性指向函数的原型对象

    b:然后原型prototype中有一个constructor的默认构造函数,这个构造函数,可以参照上面的构造函数创建对象的例子,他代表Person对象。

    好了,有啥用呢?看下面的代码,我们再解释

    看到上面的代码,原型对象和Person对象是否就明白了?

    添加新的属性,如果和原型的属性同名,只会把访问的优先级放到新的属性上,当我们删除新的属性时,就又可以访问到原型的属性上了;

    这个时候,我们是不是可以说原型对象就是最初的默认对象,而Person对象就是实例化的对象呢?我不知道,希望大牛解释下咯。

    以上是我的理解!

    3:组合使用构造函数和原型模式来创建对象

    1. var Person = function (name, age, cup) {
    2. this.name = name;
    3. this.age = age;
    4. this.cup = cup;
    5. this.showCup = function () {
    6. console.log(this.name + ":" + this.cup);
    7. };
    8. };
    9. Person.prototype = {
    10. constructor: Person,
    11. showCup: function () {
    12. console.log(this.name + ":" + this.cup);
    13. }
    14. };
    15. var liuyan = new Person("柳岩",27,"17D");
    16. var chunge = new Person("春哥", 27, "1A");
    17. liuyan.showCup();
    18. chunge.showCup();

     

    对,想的没错,把默认构造函数constructor改成自己写的就可以了.

    好了,这篇文章就讲到这吧。下篇文章学习一下javascript的继承

  • 相关阅读:
    设计模式-05建造者模式(Bulider模式)详解
    SpringCloud微服务第1章
    三网优惠话费充值接口源码文档 支持批量下单
    5 分钟教你快速掌握 GitHub Actions 自动部署博客
    视频批注软件哪个好用 分秒帧在线批注怎么用
    C++ opencv实现letterbox
    ISO三体系的流程及必要性
    肖sir__设计测试用例方法之等价类02_(黑盒测试)
    PCL1.12.1+VTK9.1+Qt5.14.2VS创建Qt项目在widget上显示点云
    CentOS 7 通过 yum 安装 MariaDB(Mysql)
  • 原文地址:https://blog.csdn.net/lmrylll/article/details/130913980