一、JS对象的基本概念和创建方法
在JavaScript中,对象是一种复合数据类型,它可以存储多个不同数据类型的值,是一个无序的属性集合。在JS中,对象由“属性”和“方法”组成。属性可以是基本数据类型、对象或数组,而方法则是一个函数。在JS中,对象是一个动态的实体,可以随时添加、删除和修改原有属性。创建对象有以下几种方法:
1.通过字面量创建
var obj = { name: "xiaoming", age: 18, sayHi: function(){ console.log("Hi, I am " + this.name + ", I am " + this.age + " years old."); } };
2.通过Object构造函数创建
var obj = new Object(); obj.name = "xiaoming"; obj.age = 18; obj.sayHi = function(){ console.log("Hi, I am " + this.name + ", I am " + this.age + " years old."); }
3.通过构造函数创建
function Person(name, age){ this.name = name; this.age = age; this.sayHi = function(){ console.log("Hi, I am " + this.name + ", I am " + this.age + " years old."); } } var obj = new Person("xiaoming", 18);
二、JS原型与原型链
每个对象都有一个原型对象,它是一个指向另一个对象的引用。这个对象被称为原型对象。当读取一个对象的属性时,如果这个对象本身没有这个属性,那么就会去它的原型对象中查找。如果原型对象中也没有这个属性,就会去原型对象的原型对象中查找,直到找到 Object.prototype 为止,这样就形成了一个链式结构,叫做原型链。
每个函数都有一个 prototype 属性,它指向一个对象,这个对象就是该构造函数的原型对象。当通过构造函数创建一个新对象时,这个新对象会从它的构造函数的原型对象中继承属性和方法。原型链的概念让我们可以复用已有对象的属性和方法,提高了代码的复用率。
示例:
function Person(name, age){ this.name = name; this.age = age; } Person.prototype.sayHi = function(){ console.log("Hi, I am " + this.name + ", I am " + this.age + " years old."); } var obj = new Person("xiaoming", 18);
三、JS继承的实现
在JS中,继承的实现有以下几种方式:
1.原型链继承
原型链继承主要是通过修改子类的原型指向父类的实例,来实现子类继承父类的属性和方法。
function Animal(){ this.type = "animal"; } Animal.prototype.eat = function(){ console.log("I am eating..."); } function Cat(){} Cat.prototype = new Animal(); var cat = new Cat();
2.构造函数继承
构造函数继承主要是通过在子类的构造函数中调用父类的构造函数,来实现子类具有父类的属性和方法。
function Animal(type){ this.type = type; } function Cat(){ Animal.call(this, "cat"); } var cat = new Cat();
3.组合继承
组合继承主要是通过用原型链继承父类的方法与构造函数继承父类的属性相结合,来实现子类既具有父类的属性又具有父类的方法。
function Animal(type){ this.type = type; } Animal.prototype.eat = function(){ console.log("I am eating..."); } function Cat(type){ Animal.call(this, type); } Cat.prototype = new Animal(); Cat.prototype.constructor = Cat;
四、JS对象的特殊对象和类型判断方法
在JS中,有些对象是特殊对象,如:Object、Function、Array、Date、RegExp等。这些特殊对象都有自己特殊的属性和方法,我们可以通过 typeof 判断对象的类型。
typeof 返回一个表示数据类型的字符串,它是一个运算符而不是函数。它只有一个操作数,该操作数可以是任意类型,它返回的结果是表示操作数类型的一个字符串。常用的数据类型有:undefined、number、string、object、function、boolean。
var a = 123; console.log(typeof a); //"number"
另外,JS中还有 instanceof 和 Object.prototype.toString.call() 两种类型判断方法。
instanceof 运算符用于判断一个对象是否是一个类的实例。它的原理是通过判断对象的原型链中是否有这个构造函数的 prototype 对象。
function Person(){} var person = new Person(); console.log(person instanceof Person); //true console.log(person instanceof Object); //true
Object.prototype.toString.call() 可以获取一个对象的字符串类型。它的原理是返回了对象类型的标准字符串表示。在进行类型转换判断时,它相对于 typeof 更加准确。
var a = 123; console.log(Object.prototype.toString.call(a)); //"[object Number]"
原创文章,作者:EEPRI,如若转载,请注明出处:https://www.506064.com/n/351781.html