📜  javascript 反射 - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:41.583000             🧑  作者: Mango

Javascript 反射

反射是指在程序运行时获取一个类的信息,可以动态地创建对象、调用方法、修改属性等。

在Javascript中,反射可以通过一些内置的函数和操作符实现,如下:

1. typeof 操作符

typeof 操作符用于获取一个值的数据类型。

console.log(typeof 123);           // "number"
console.log(typeof 'Hello World'); // "string"
console.log(typeof true);          // "boolean"
console.log(typeof null);          // "object"
console.log(typeof undefined);     // "undefined"
console.log(typeof [1, 2, 3]);     // "object"
console.log(typeof {a: 1, b: 2});  // "object"
console.log(typeof function(){});  // "function"
2. instanceof 操作符

instanceof 操作符用于判断一个对象是否是某个类的实例。

function Person() {}
var p = new Person();
console.log(p instanceof Person); // true
console.log(p instanceof Object); // true

var arr = [1, 2, 3];
console.log(arr instanceof Array);  // true
console.log(arr instanceof Object); // true

var str = 'Hello World';
console.log(str instanceof String); // false

var num = 123;
console.log(num instanceof Number); // false

var bool = true;
console.log(bool instanceof Boolean); // false
3. Object.prototype.toString 方法

Object.prototype.toString 方法返回一个对象的字符串表示形式。

console.log(Object.prototype.toString.call(123));           // "[object Number]"
console.log(Object.prototype.toString.call('Hello World')); // "[object String]"
console.log(Object.prototype.toString.call(true));          // "[object Boolean]"
console.log(Object.prototype.toString.call(null));          // "[object Null]"
console.log(Object.prototype.toString.call(undefined));     // "[object Undefined]"
console.log(Object.prototype.toString.call([1, 2, 3]));     // "[object Array]"
console.log(Object.prototype.toString.call({a: 1, b: 2}));  // "[object Object]"
console.log(Object.prototype.toString.call(function(){}));  // "[object Function]"
4. Reflect API

Reflect API 是一个新的内置对象,提供了一组方法,用于操作对象的属性和方法。

var obj = {a: 1, b: 2};
console.log(Reflect.has(obj, 'a')); // true
console.log(Reflect.has(obj, 'c')); // false

var arr = [1, 2, 3];
console.log(Reflect.get(arr, 1));   // 2
console.log(Reflect.set(arr, 1, 4)); // [ 1, 4, 3 ]

function Person(name) {
  this.name = name;
}
var p = Reflect.construct(Person, ['Bob']);
console.log(p instanceof Person);  // true
console.log(p.name);              // "Bob"

以上是Javascript中反射的一些基本操作。通过反射,我们可以实现一些灵活的编程技巧。