请问javascript中的原型对象问题?
<script language="javascript">
function pen(color,price){
this.color=color;
this.price=price;
}
pen.prototype.name="ss";
var mypen=new pen("yellow","12")
document.write (mypen.color+"<br>");
document.write (mypen.price+"<br>");
document.write (mypen.name+"<br>");
document.write (mypen.constructor.prototype.name);</script>
第一个问题:pen函数里的this指的是mypen,那么我在pen函数里写alert(this==mypen),为什么是false?要在啥处写才可以返回true?
第二个问题:var k=new Array()是先返回Array对象,再用new创建Array对象的(新Array对象)给kvar mypen=new pen("yellow","12")这里是先调用pen("yellow","12")函数,在函数里面没有返回对象,那么new 创建的是(什么)对象的新对象赋值给变量mypen
第三个问题:prototype是原形对象,书上说原型对象就是参照对象,请问这个参照对象指的又是什么对象?pen.prototype.name="ss";为什么这句是写在函数体外,而不是写在函数体内?第四个问题:pen.prototype.name="ss";该句pen是函数,为啥可以作为对象?
第五个问题:this对象是根据什么来判断的,一会是window,一会儿是document.一会儿是对象实例,请指教this对象是根据什么来判断的,有没有属性和方法可以快速的检测出this是什么对象?

解决方案 »

  1.   

    此pen函数,叫做构造函数,所以PEN是对象
    pen.prototype.name="ss";该句pen是函数,为啥可以作为对象? 
    写在里面也可以,只是习惯不一样罢了
      

  2.   

    第一个问题: 
    this 是 pen 的实例对象, 跟 Java 中的 this 类似, 并非是此方法。
    第二个问题: 
    var mypen=new pen("yellow","12") 是调用构造函数 pen(color,price) 创建的对象,可以和 Java 中的带参构造函数作比较。第三个问题: 
    使用原型来创建对象
    在编写构造函数时,可以使用原型对象(它本身是所有构造函数的一个属性)的属性来创建继承属性和共享方法。原型属性和方法将按引用复制给类中的每个对象,因此它们都具有相同的值。可以在一个对象中更改原型属性的值,新的值将覆盖默认值,但仅在该实例中有效。属于这个类的其他对象不受此更改的影响。可以给预定义的构造函数(都具有原型对象)定义附加属性。例如,如果想要能够删除字符串的前后空格(与 VBScript 的 Trim 函数类似),就可以给 String 原型对象创建自己的方法。// 增加一个名为 trim 的函数作为
    // String 构造函数的原型对象的一个方法。
    String.prototype.trim = function()
    {
        // 用正则表达式将前后空格
        // 用空字符串替代。
        return this.replace(/(^\s*)|(\s*$)/g, "");
    }// 有空格的字符串
    var s = "    leading and trailing spaces    ";// 显示 "    leading and trailing spaces     (35)"
    window.alert(s + " (" + s.length + ")");// 删除前后空格
    s = s.trim();
    // 显示"leading and trailing spaces (27)"
    window.alert(s + " (" + s.length + ")");
    pen.prototype.name="ss" 可以写在函数里面。
    第四个问题: pen.prototype.name="ss";该句pen是函数,为啥可以作为对象? 
    第五个问题: 
    简单的一句话: this 就是当前对象, 有什么不明白的地方可以去 google 搜索一下“javascript this”
      

  3.   

    第一个问题: 
    this 是 window 的实例对象。
    记住:this永远指的是调用者对象,此处调用alert方法的对象是window,所以此处指的是window对象。