JavaScript学习笔记——类与对象

构造与原型链

JavaScript中类的创建与其他语言(如Java)类似。

  1. 使用constructor()来创建类的构造函数。
  2. 类中的方法不需要添加function关键字。
  3. 使用extends关键字实现继承,例如:
class Son extends Father {
	constructor(surname, firstname) {
		super(surname);
		this.firstname = firstname;
	}
	super.say();
}
  1. 使用super来调用父类的函数,可以是构造函数,也可以是普通函数。但要注意,如若在constructor()中使用super,必须放在constructor的第一行,也就是所有this语句的前面。使用super调用普通函数时,按照super.func()的格式调用。
  2. ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象。
  3. 类的构造函数存在内存浪费的问题:
    在这里插入图片描述
    主要是存在为方法重复开辟内存空间里的。
  4. 构造函数通过原型分配的函数是所有对象所共享的。JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。注意这个 prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。我们可以把那些不变的方法,直接定义在 prototype对象上,这样所有对象的实例就可以共享这些方法。
  5. 原型的作用就是共享方法。
  6. 原型的使用:
class Son extends Father {
	constructor(surname, firstname) {
		super(surname);
		this.firstname = firstname;
	}
	Son.prototype.say = function () {
		console.log('say something');
	}
}
  1. 一般情况下,公共属性放在构造函数中,公共方法放在原型对象里。
  2. 对象身上系统会自动添加__proto__指向构造函数的原型对象。
  3. prototype是原型对象,__proto__是对象的原型,它们都有一个名为constructor的属性指向构造函数。
  4. prototype中需要添加较多的方法时,可以采用下面的方式:
Star.prototype = {
    constructor: Star,
    sing: function() {
        console.log('我会唱歌');
    },
    movie: function() {
        console.log('我会演电影');
    }
}

这里需要注意的是第一行,如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动的利用constructor指回原来的构造函数。

  1. 构造函数、实例与原型对象的关系
    在这里插入图片描述
    prototype对象是构造函数构造出的对象的父级

  2. 只要是对象,就有__proto__原型,指向原型对象。

  3. 原型链
    在这里插入图片描述

  4. 成员的查找规则

    • 当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
    • 如果没有就查找它的原型(也就是__proto__指向的 prototype 原型对象)。
    • 如果还没有就查找原型对象的原型(Object的原型对象)。
    • 依此类推一直找到 Object 为止(null)。
    • __proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。
  5. 可以通过原型对象,对原来的内置对象进行扩展自定义的方法。

数组和字符串内置对象不能给原型对象覆盖操作 Array.prototype = {} ,只能是 Array.prototype.xxx = function(){} 的方式。

继承

  1. ES6之前并没有给我们提供extends继承。我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承
  2. 组合继承使用call关键字实现,其格式为:
    fun.call(thisArg, arg1, arg2, ...)
    通常,thisArg为子类this指针,fun为父类,arg为各参数变量。
    实例:
// 父类
function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
}
// 子类
function Student(name, age, sex, score) {
  Person.call(this, name, age, sex);  // 此时父类的 this 指向子类的 this,同时调用这个函数
  this.score = score;
}
var s1 = new Student('zs', 18, '男', 100);
console.dir(s1); 
  1. 一般情况下,对象的方法都在构造函数的原型对象中设置,通过构造函数无法继承父类方法。借用原型对象继承父类型方法的核心原理如下:
    • 将子类所共享的方法提取出来,让子类的 prototype 原型对象 = new 父类()
    • 本质:子类原型对象等于是实例化父类,因为父类实例化之后另外开辟空间,就不会影响原来父类原型对象
    • 将子类的constructor 从新指向子类的构造函数
      实例:
// 1. 父构造函数
function Father(uname, age) {
    // this 指向父构造函数的对象实例
    this.uname = uname;
    this.age = age;
}
Father.prototype.money = function() {
    console.log(100000);

};
// 2 .子构造函数 
function Son(uname, age, score) {
    // this 指向子构造函数的对象实例
    Father.call(this, uname, age);
    this.score = score;
}
// Son.prototype = Father.prototype;  这样直接赋值会有问题,如果修改了子原型对象,父原型对象也会跟着一起变化
Son.prototype = new Father();
// 如果利用对象的形式修改了原型对象,别忘了利用constructor 指回原来的构造函数
Son.prototype.constructor = Son;
// 这个是子构造函数专门的方法
Son.prototype.exam = function() {
    console.log('孩子要考试');

}

类的本质

  1. class的本质是function.
  2. 类的所有方法都定义在类的prototype属性上。
  3. 类创建的实例,里面也有__proto__指向类的prototype原型对象。
  4. ES6的类的本质是语法糖
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 字符串对象是JavaScript中的一种数据类型,用于表示文本数据。字符串对象可以包含任何字符,包括字母、数字、符号和空格等。在JavaScript中,字符串对象是不可变的,也就是说一旦创建就不能修改。但是可以通过一些方法来操作字符串对象,如拼接、截取、替换等。常见的字符串方法有concat()、slice()、replace()等。掌握字符串对象的使用可以帮助我们更好地处理文本数据。 ### 回答2: JavaScript字符串对象是一个在JavaScript中非常重要的事物。JavaScript字符串对象可以帮助我们在JavaScript编程中进行文本操作。通过了解字符串对象,可以使我们更有效地处理字符串数据,并让我们的代码更加强大。 JavaScript中的字符串对象具有很多方法和属性,可以帮助我们对字符串进行各种操作。以下是一些常用的字符串对象方法: 1. length属性:返回字符串的长度。 2. charAt()方法:返回指定索引位置的字符。 3. concat()方法:连接两个或多个字符串。 4. slice()方法:提取字符串的一部分,并返回一个新字符串。 5. substr()方法:从指定位置开始提取长度为指定的字符。 6. replace()方法:替换字符串中的指定文本。 7. split()方法:将字符串转换为数组。 8. toLowerCase()方法:将字符串转换为小写。 9. toUpperCase()方法:将字符串转换为大写。 在JavaScript中处理字符串非常重要,因为在处理表单、验证用户输入等方面都需要使用到字符串。字符串对象也是最常用的JavaScript对象之一,因此熟悉JavaScript字符串对象将有助于提高程序的效率和简洁性。 需要特别注意字符串是不可修改的,一旦创建了一个字符串对象,就无法修改它的值。所以,任何字符串的修改操作都将返回一个新的字符串。 在编写程序时,应根据需要选择适当的字符串操作方法和属性。例如,在向用户显示错误消息时,可能需要使用charAt()方法或slice()方法来提取并显示错误消息中的第一个字符或前几个字符。或者,在对用户输入进行验证时,可以使用indexOf()方法或search()方法来检查输入的字符串中是否包含特定的字符或字符串。 总之,JavaScript字符串对象是处理JavaScript编程中文本数据的重要工具。通过了解字符串对象的各种方法和属性,可以更加有效和灵活的处理和操纵字符串数据。 ### 回答3: JavaScript中的字符串对象是一个字符串值的表示。它提供了对字符串值的访问和操作。JavaScript字符串是Unicode字符串,因此它们可以包含任何Unicode字符(包括多字节字符)。 字符串对象的主要方法有: 1. charAt()方法-返回指定索引的字符。该索引是基于零的。例如: var str = "hello world"; console.log(str.charAt(1)); //输出e 2. concat()方法-将一个或多个字符串连接到原始字符串,并返回新字符串。例如: var str1 = "hello "; var str2 = "world"; var newStr = str1.concat(str2); console.log(newStr); //输出hello world 3. indexOf()方法-返回第一个匹配的字符索引。如果没有找到匹配项,则返回-1。例如: var str = "hello world"; console.log(str.indexOf("world")); //输出6 4. lastIndexOf()方法-返回最后一个匹配的字符索引。如果没有找到匹配项,则返回-1。例如: var str = "hello world"; console.log(str.lastIndexOf("l")); //输出9 5. replace()方法-替换字符串中的字符。例如: var str = "hello world"; console.log(str.replace("world", "everyone")); //输出hello everyone 6. slice()方法-从字符串中提取指定的字符。例如: var str = "hello world"; console.log(str.slice(0, 5)); //输出hello 7. split()方法-将字符串拆分为子字符串,并返回一个数组。例如: var str = "hello world"; console.log(str.split(" ")); //输出["hello", "world"] 字符串对象是JavaScript中最常用的对象之一。它提供了许多方法,可以让您对字符串执行各种操作,包括搜索、提取和更改字符。熟练掌握这些方法,可以使您在JavaScript中更有效地处理字符串值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值