• 星期五, 1月 29th, 2010
//原型链只是 链接
function ClassA (sName,sColor){
this.name = sName;
this.color = sColor;
}
ClassA.prototype.name = "Car";
ClassA.prototype.sayName = function(){
alert(this.name);
}
var obj = new ClassA("Car","red");
obj.name ="Clothes";
obj.sayName();//Colothes
delete obj.name;
obj.sayName();//Car
//=======================================================
//this
//全局this
alert(this === window);//true
alert(window.alert === this.alert);//true
alert(this.parseInt(035,10))l//29
//this是运行时决定的,而不是函数定义的
function sayColor(){//定义一个全局函数,相当于window.sayColor();
alert(this.color);
}
var color = "red";//定义一个全局变量,相当于window.color = "red";
//sayColor();//等价于window.sayColor();输出red
var Car = {//自定义对象
color:"blue"//注意语法符号
}
sayColor.apply(this);//等价于window.sayColor();输出red
sayColor.apply(Car);//sayColor中的this===Car;输出blue
//=======================================================
//函数也是对象
//定义一个全局函数
function sayColor(){
if (this === window){
alert ("this is window");
}
}
sayColor();//this is window
//将sayColor函数的一个color属性定义为函数
sayColor.color = function(){
if (this === window ){
alert("this is window");
}else if (this === sayColor){
alert("this is sayColor");
}else if (this === sayName){
alert("this is sayName");
}
}
sayColor.color();//this is sayColor
//定义一个新对象用来传递给它
var sayName = new Object;
sayColor.color.apply(sayName);//this is sayName
//=======================================================
//prototype
//在Array的原型中添加min方法
Array.prototype.min = function(){
var min = this[0];
for (var i = 1;i < this.length; i++){
if (this[i] < min){
min = this[i];
}
}
return min;
};
//alert([52,62,2,3,88,99,6].min());//输出2
//但是,神奇的瞬间发生了
var aValue = [];
for (var i in aValue){
alert(i);//输出min,for-in中把min方法循环了出来!用hasOwnProperty解决该问题
//if (aValue.hasOwnProperty(i)){//判断是否为aValue中的成员
// alert(i);
// }
}
//=======================================================
//contructor
//contructor始终指向创建当前对象的函数
var arr = [5545,22,553];
var fnTest= function (){};
var oTest = {};//等价于new Object();
alert(arr.constructor === Array);//true
alert(fnTest.constructor === Function);//true
alert(oTest.constructor === Object);//true
//自定义函数
function Car(sColor){
this.color = sColor;
}
Car.prototype.sayColor = function(){
alert(this.color);
}
var obj = new Car("red");
//alert(obj.constructor === Car);//true
//alert(Car.prototype.constructor === Car);//true
//alert(obj.constructor.prototype.constructor === Car);//true
//但是!
function Car(sColor){
this.color = sColor;
}
Car.prototype = { //这里被对象覆盖了
sayColor:function (){
alert(this.color);
}
}
var obj = new Car("red");
alert(obj.constructor === Car);//false
alert(Car.prototype.constructor === Car);//false
alert(obj.constructor.prototype.constructor === Car);//false
//alert(obj.constructor === Object);//true
//alert(Car.prototype.constructor === Object);//true
//alert(obj.constructor.prototype.constructor === Object);//true
//解决方法重新覆盖,这样Car.prototype.constructor === Car
Category: JavaScript
| Leave a Comment

