两者根本不是一个概念,我不懂java,但是C#还是懂一点点的,static是完全面向对象的C#里的东西。
prototype,在javascript里,为function写出来的对象提供的一种访问成员的方法吧(权宜之计),了解不多,说的不对的地方就当我胡说好咯。 看了没几天C#,就觉得javascript好落后:(,唉。
prototype,在javascript里,为function写出来的对象提供的一种访问成员的方法吧(权宜之计),了解不多,说的不对的地方就当我胡说好咯。 看了没几天C#,就觉得javascript好落后:(,唉。
java里不能用instance去访问static变量?反过来才是不行吧;)
prototype相当于增加一个public成员(property或method)
但是prototype是扩展原型的功能,而一般使用static的用处就是为了能够直接使用class来访问数据成员、方法或者利用static构造函数来初始化static的数据成员,胡说了一通,是不是这样?
看个例子吧:
function car(owner,make,year){
……
}
car.prototype.color="black";
var carA = new car("a","b",1992);
var carB = new car("a1","b1",1990);
carA.color = "red";
//此时,carA的color属性应该是一个新的属性,与原来的prototype.color 并没有关系,但是,原来的那个prototype.color(="black"的那个属性)还有什么用处呢?
class car{
public String color = "black"
}
----------------------------------------------------------//从下面的例子可以明确看到这一点
function Car(){
}
Car.prototype.color = "black"oCar1 = new Car()
alert("car1's color:" + oCar1.color) //初始值black
oCar1.color = "red"
alert("car1's color:" + oCar1.color) //实例的color已经改变
oCar2 = new Car()
alert("car2's color:" + oCar2.color) //初始值black
alert(Car.color) //undifined,因为color不是static变量
书上说:
carA.color = "red";
是实例carA有了一个新的属性color,和原来prototype申明的那个color是不一样的!???!·#¥%……—*越来越糊涂了!
书上说:
carA.color = "red";
是实例carA有了一个新的属性color,和原来prototype申明的那个color是不一样的!???!·#¥%……—*越来越糊涂了!
书上说:
carA.color = "red";
是实例carA有了一个新的属性color,和原来prototype申明的那个color是不一样的
越来越糊涂了!!!
新实例的color属性当然和prototype定义的color属性当然不一定
oCar1 = new Car()
oCar1.color = "red"
alert("car1's color:" + oCar1.color) //实例的color已经改变
alert("数据成员color的值仍然没有改变:" + new Car().color)