js的异或运算
在JavaScript中,异或运算使用符号^表示,它的作用是对两个二进制数进行逐位比较,如果相同则对应位的结果为0,如果不同则对应位的结果为1。例如:
console.log(5 ^ 3); // 输出2,因为5和3的二进制分别是101和011,按位异或后得到110,即2
如果两个操作数其中一个不是二进制数,则会将其转换为二进制数进行运算。如果两个操作数都不是数字类型,则会将它们转换为字符串类型后进行运算,具体的规则可以参考JavaScript的数据类型转换。
js继承介绍
在 JavaScript 中,继承可以通过以下几种方式实现:
- 原型继承
基于原型链实现继承,通过将一个构造函数的原型对象作为另一个构造函数的原型来实现继承。
// 父类
function Animal() {
this.eat = function () {
console.log('Animal eat');
}
}
// 子类
function Dog() {
}
// 继承
Dog.prototype = new Animal();
// 创建实例
var dog = new Dog();
dog.eat(); // 输出: Animal eat
- 构造函数继承
通过在一个构造函数内部调用另一个构造函数来实现继承。
// 父类
function Animal(name) {
this.name = name;
}
// 子类
function Dog(name) {
Animal.call(this, name);
}
// 创建实例
var dog = new Dog('Tom');
console.log(dog.name); // 输出: Tom
- 组合继承
同时使用原型继承和构造函数继承的方式实现继承。
// 父类
function Animal(name) {
this.name = name;
}
Animal.prototype.eat = function() {
console.log('Animal eat');
}
// 子类
function Dog(name) {
Animal.call(this, name); // 构造函数继承
}
Dog.prototype = new Animal(); // 原型继承
// 创建实例
var dog = new Dog('Tom');
dog.eat(); // 输出: Animal eat
console.log(dog.name); // 输出: Tom
- ES6 的 extends
ES6 中新增了 class 和 extends 关键字,可以更方便地实现继承。
// 父类
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log('Animal eat');
}
}
// 子类
class Dog extends Animal {
constructor(name) {
super(name);
}
}
// 创建实例
let dog = new Dog('Tom');
dog.eat(); // 输出: Animal eat
console.log(dog.name); // 输出: Tom