正在学习javascript,过程中有些概念混淆不清晰,问题:什么是静态属性,对应的是什么属性?还有其他什么属性?他们之间的区别和关系是什么?
kikong说得很全面了,我再稍微说一点。
所谓静态变量,JS中实际并没有这种说法。在Java、C++等语言才有的。
而且我想题主应该是指的类的静态变量,或者叫做类变量,即与某个类绑定的变量。
然而JS本身又是没有类的,不过我们通常把JS中的构造函数叫做类。例如:String这个构造函数,我们也可以叫它类String,而String有个方法叫做fromCharCode
,我们可以称它静态变量fromCharCode,而String.prototype.indexOf
方法是所有String的实例共享的,所以是实例变量。
但是,换一个角度,当你把String看成构造函数Function的实例时,你也可以说fromCharCode是个实例变量。
所以嘛,对于一个所谓的静态变量,从某个角度看,可能就变成了实例变量。这是由于在JS中函数也是一种对象导致的。
静态属性,比如PHP,是以类名::变量名访问的,是不用new的。
同理,javascript静态属性:
function Foo(name) {
this.userName = name; // 动态属性
this.showUserName = function () { // 动态方法
console.log(this.userName);
}
}
Foo.staticName = 'Lee'; // 静态属性
由于js中不存在类这一说,可以把构造函数名作为类名。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
staticProp
就是静态属性?staticMethod
就是静态方法静态
是面向对象的编程语言中的叫法吧函数也是对象,只要声明函数后,就可以往这个函数添加属性和方法
instanceProp
就是个实例属性instanceMethod
就是个实例方法实例对象的属性和方法只在使用new操作符创建以这个函数为构造函数的实例对象后才存在
当函数作为普通函数或一个对象方法调用时,是另外一种情况了
protoProp
为原型对象的属性protoMethod
为原型对象的方法为一个函数的原型对象赋值后就会存在,以这个函数为构造函数创建的实例对象能够访问到原型的属性及方法
JS中通过基于原型(基于对象)的方式来实现对象继承的~~
以上属性和方法都是依赖于对象,JS中都是对象,函数也是对象