一.jquery中prototype
javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。每一个构造函数都有一个属性叫做原型。这个属性非常有用:为一个特定类声明通用的变量或者函数。prototype是一个对象,因此,你能够给它添加属性。你添加给prototype的属性将会成为使用这个构造函数创建的对象的通用属性。每个函数都有一个prototype属性,prototype包含函数实例共享的方法和属性。
scada.scheme.EditableScheme.prototype = Object.create(scada.scheme.Scheme.prototype);
scada.scheme.EditableScheme.constructor = scada.scheme.EditableScheme;
这段代码是在JavaScript中创建一个新的对象原型继承的示例,具体针对scada.scheme.EditableScheme和scada.scheme.Scheme这两个对象。我会为你逐步解释这段代码。
Object.create 方法
Object.create() 是一个JavaScript方法,它创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。这意味着新对象会继承现有对象的属性和方法。
javascript
var newObject = Object.create(existingObject);
在上面的代码中,newObject将继承existingObject的所有属性和方法。
2. 设置 scada.scheme.EditableScheme 的原型
javascript
scada.scheme.EditableScheme.prototype = Object.create(scada.scheme.Scheme.prototype);
这行代码的意思是,将scada.scheme.EditableScheme的原型设置为基于scada.scheme.Scheme的原型创建的新对象。因此,scada.scheme.EditableScheme将继承scada.scheme.Scheme的所有属性和方法。
3. 设置构造函数
javascript
scada.scheme.EditableScheme.constructor = scada.scheme.EditableScheme;
当你使用Object.create()来设置原型时,新的原型对象会继承其原始对象的constructor属性。这意味着scada.scheme.EditableScheme.prototype.constructor现在指向scada.scheme.Scheme,而不是我们期望的scada.scheme.EditableScheme。
因此,上面的代码行是显式地将scada.scheme.EditableScheme.prototype的constructor属性设置回scada.scheme.EditableScheme,以确保其正确性。
二。constructor是Object类型的原型属性,它能够返回当前对象的构造器(类型函数)。利用该属性,可以检测复合类型数据的类型,如对象,数组和函数等。【示例1】下面代码可以检测对象和数组的类型,以此可以过滤对象、数组。
var o = {};
var a = [];
if (o.constructor == Object){
console.log("o是对象")
}
if (a.constructor == Array){
console.log("a是数组“)
}
结合typeof运算符和constuctor属性,可以检测不同的数据类型。以下是常见的数据类型检测结果。
值(value) typeof value(表达式返回值) value.constructor(构建函数的属性值)
function className(){};
var value = new className();
"object" className