数码资讯
介绍Javascript中的几个重要属性(这个,构造函数,原型)
这 这表示当前对象。如果在全局范围中使用,则引用当前页面对象的窗口。如果这是在函数中使用的,那么这是指根据运行时函数调用的东西,我们也可以使用两个全局的应用和调用方法来改变函数中这个函数的特定方向性。 首先看一个在全局作用域中使用此示例的例子: 复制代码代码如下所示: (console.log =窗
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
这
这表示当前对象。如果在全局范围中使用,则引用当前页面对象的窗口。如果这是在函数中使用的,那么这是指根据运行时函数调用的东西,我们也可以使用两个全局的应用和调用方法来改变函数中这个函数的特定方向性。
首先看一个在全局作用域中使用此示例的例子:
复制代码代码如下所示:
(console.log =窗口);
console.log(window.alert =。警报);
console.log(。ParseInt(10));
函数中的这个函数是在运行时确定的,而不是函数定义,如下所示:
复制代码代码如下所示:
富(){
console.log(果);
}
水果=;
(食品);
包= {
水果:,
Foo Foo:
};
Pack.foo();
全局函数应用和调用可以用来改变函数中的这个方向,如下所示:
复制代码代码如下所示:
富(){
console.log(果);
}
水果=;
包= {
水果:
};
foo.apply(窗口);
foo.apply(包);
注意:应用程序和调用的两个函数是相同的。唯一的区别是,这两个函数的参数定义不同。
因为函数也是Javascript中的对象,所以我们可以看到以下有趣的示例:
复制代码代码如下所示:
富(){
(=窗口){
console.log();
}
}
foo.boo =(){()
(=){
console.log();
(=窗口){ }
console.log();
}
};
(食品);
foo.boo();
foo.boo.apply(窗口);
原型
原型本质上是一个Javascript对象,每个函数都有一个默认的原型属性。
如果在创建自定义对象的场景中使用这个函数,我们称这个函数为构造函数:
复制代码代码如下所示:
人(名字){
名字=名字;
}
person.prototype = { {
同:(){
名称;
}
}
张=人();
console.log(zhang.getname());
作为一个类比,我们考虑Javascript中的数据类型字符串(字符串)、数字(数字)、数组(数组)、对象(对象)、日期(日期)等,我们有理由相信,这些类型在Javascript中是作为构造函数实现的,例如:
数组(){
}
arr1 =数组(1, 56, 34,12);
arr2 = { 1, 56, 34,12 };
许多方法(如连接,连接,推)阵列的操作也应在原型属性定义。
事实上,原型Javascript属性所有的内部数据类型都具有只读(这是可以理解的:因为如果修改了原型属性,这些预定义的方法就消失了),但是我们可以将自己添加到扩展方法中。
Array.prototype.min =(){()
MIN = { 0 };
(i = 1;i <长度;i ++){
({ } <分钟){
min = { };
}
}
min;
};
console.log({ 1, 56, 34,12 }。min());
注:有陷阱。将扩展方法添加到阵列的原型中后,也可以在for循环数组中使用扩展方法。
下面的代码说明了这一点(假设MIN方法已经扩展到数组的原型):
ARR = { 1, 56, 34,12 };
总数= 0;
(我是){
总= parseInt(ARR {我},10);
}
console.log(总);
这个解决方案也很简单:
ARR = { 1, 56, 34,12 };
总数= 0;
(我是){
(arr.hasownproperty(I)){
总= parseInt(ARR {我},10);
}
}
console.log(总);
构造函数
构造函数总是指向创建当前对象的构造函数:
复制代码代码如下所示:
ARR = { 1, 56, 34,12 };
console.log(arr.constructor =阵);
=(){ };
console.log(foo.constructor =功能);
obj = foo();
console.log(obj.constructor = foo);
console.log(obj.constructor.constructor =功能);
但是当构造函数遇到原型时,会发生一些有趣的事情。
我们知道每个函数都有一个默认属性原型,这个原型的构造函数默认情况下指向这个函数:
复制代码代码如下所示:
人(名字){
名字=名字;
};
person.prototype.getname =(){()
名称;
};
p =人();
console.log(p.constructor =人);
console.log(person.prototype.constructor =人);
console.log(p.constructor.prototype.constructor =人);
在我们重新定义原型的功能时(注意:上面的区别,这里不是修改构造函数的行为,但是覆盖率)有点奇怪,例如:
复制代码代码如下所示:
人(名字){
名字=名字;
};
person.prototype = { {
同:(){
名称;
}
};
p =人();
console.log(p.constructor =人);
console.log(person.prototype.constructor =人);
console.log(p.constructor.prototype.constructor =人);
为什么
原来,当person.prototype被覆盖,它等价于下面的代码运行:
复制代码代码如下所示:
person.prototype =对象({
同:(){
名称;
}
});
构造函数总是点创建自己的构造函数,所以这是person.prototype.constructor = = =对象:
复制代码代码如下所示:
人(名字){
名字=名字;
};
person.prototype = { {
同:(){
名称;
}
};
p =人();
console.log(p.constructor =对象);
console.log(person.prototype.constructor =对象);
console.log(p.constructor.prototype.constructor =对象);
你如何纠正这个问题方法过于简单恢复Person.prototype.constructor:
复制代码代码如下所示:
人(名字){
名字=名字;
};
person.prototype =对象({
同:(){
名称;
}
});
person.prototype.constructor =人;
p =人();
console.log(p.constructor =人);
console.log(person.prototype.constructor =人);
console.log(p.constructor.prototype.constructor =人);
这表示当前对象。如果在全局范围中使用,则引用当前页面对象的窗口。如果这是在函数中使用的,那么这是指根据运行时函数调用的东西,我们也可以使用两个全局的应用和调用方法来改变函数中这个函数的特定方向性。
首先看一个在全局作用域中使用此示例的例子:
复制代码代码如下所示:
(console.log =窗口);
console.log(window.alert =。警报);
console.log(。ParseInt(10));
函数中的这个函数是在运行时确定的,而不是函数定义,如下所示:
复制代码代码如下所示:
富(){
console.log(果);
}
水果=;
(食品);
包= {
水果:,
Foo Foo:
};
Pack.foo();
全局函数应用和调用可以用来改变函数中的这个方向,如下所示:
复制代码代码如下所示:
富(){
console.log(果);
}
水果=;
包= {
水果:
};
foo.apply(窗口);
foo.apply(包);
注意:应用程序和调用的两个函数是相同的。唯一的区别是,这两个函数的参数定义不同。
因为函数也是Javascript中的对象,所以我们可以看到以下有趣的示例:
复制代码代码如下所示:
富(){
(=窗口){
console.log();
}
}
foo.boo =(){()
(=){
console.log();
(=窗口){ }
console.log();
}
};
(食品);
foo.boo();
foo.boo.apply(窗口);
原型
原型本质上是一个Javascript对象,每个函数都有一个默认的原型属性。
如果在创建自定义对象的场景中使用这个函数,我们称这个函数为构造函数:
复制代码代码如下所示:
人(名字){
名字=名字;
}
person.prototype = { {
同:(){
名称;
}
}
张=人();
console.log(zhang.getname());
作为一个类比,我们考虑Javascript中的数据类型字符串(字符串)、数字(数字)、数组(数组)、对象(对象)、日期(日期)等,我们有理由相信,这些类型在Javascript中是作为构造函数实现的,例如:
数组(){
}
arr1 =数组(1, 56, 34,12);
arr2 = { 1, 56, 34,12 };
许多方法(如连接,连接,推)阵列的操作也应在原型属性定义。
事实上,原型Javascript属性所有的内部数据类型都具有只读(这是可以理解的:因为如果修改了原型属性,这些预定义的方法就消失了),但是我们可以将自己添加到扩展方法中。
Array.prototype.min =(){()
MIN = { 0 };
(i = 1;i <长度;i ++){
({ } <分钟){
min = { };
}
}
min;
};
console.log({ 1, 56, 34,12 }。min());
注:有陷阱。将扩展方法添加到阵列的原型中后,也可以在for循环数组中使用扩展方法。
下面的代码说明了这一点(假设MIN方法已经扩展到数组的原型):
ARR = { 1, 56, 34,12 };
总数= 0;
(我是){
总= parseInt(ARR {我},10);
}
console.log(总);
这个解决方案也很简单:
ARR = { 1, 56, 34,12 };
总数= 0;
(我是){
(arr.hasownproperty(I)){
总= parseInt(ARR {我},10);
}
}
console.log(总);
构造函数
构造函数总是指向创建当前对象的构造函数:
复制代码代码如下所示:
ARR = { 1, 56, 34,12 };
console.log(arr.constructor =阵);
=(){ };
console.log(foo.constructor =功能);
obj = foo();
console.log(obj.constructor = foo);
console.log(obj.constructor.constructor =功能);
但是当构造函数遇到原型时,会发生一些有趣的事情。
我们知道每个函数都有一个默认属性原型,这个原型的构造函数默认情况下指向这个函数:
复制代码代码如下所示:
人(名字){
名字=名字;
};
person.prototype.getname =(){()
名称;
};
p =人();
console.log(p.constructor =人);
console.log(person.prototype.constructor =人);
console.log(p.constructor.prototype.constructor =人);
在我们重新定义原型的功能时(注意:上面的区别,这里不是修改构造函数的行为,但是覆盖率)有点奇怪,例如:
复制代码代码如下所示:
人(名字){
名字=名字;
};
person.prototype = { {
同:(){
名称;
}
};
p =人();
console.log(p.constructor =人);
console.log(person.prototype.constructor =人);
console.log(p.constructor.prototype.constructor =人);
为什么
原来,当person.prototype被覆盖,它等价于下面的代码运行:
复制代码代码如下所示:
person.prototype =对象({
同:(){
名称;
}
});
构造函数总是点创建自己的构造函数,所以这是person.prototype.constructor = = =对象:
复制代码代码如下所示:
人(名字){
名字=名字;
};
person.prototype = { {
同:(){
名称;
}
};
p =人();
console.log(p.constructor =对象);
console.log(person.prototype.constructor =对象);
console.log(p.constructor.prototype.constructor =对象);
你如何纠正这个问题方法过于简单恢复Person.prototype.constructor:
复制代码代码如下所示:
人(名字){
名字=名字;
};
person.prototype =对象({
同:(){
名称;
}
});
person.prototype.constructor =人;
p =人();
console.log(p.constructor =人);
console.log(person.prototype.constructor =人);
console.log(p.constructor.prototype.constructor =人);
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。