📅  最后修改于: 2023-12-03 15:31:41.583000             🧑  作者: Mango
反射是指在程序运行时获取一个类的信息,可以动态地创建对象、调用方法、修改属性等。
在Javascript中,反射可以通过一些内置的函数和操作符实现,如下:
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"
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
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]"
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中反射的一些基本操作。通过反射,我们可以实现一些灵活的编程技巧。