关于javascript对象的prototype与constructor

constructor 属性

表示创建对象的函数。

object.constructor

必需的 object是对象或函数的名称。

constructor始终指向创建当前对象的构造函数

事例:

function Parenizor(name){
    this.name=name
}
    Parenizor.prototype.getName=function(){
        return this.name;
    }
 
function Narenizor(value){
    this.value=value
}

    //当实例化对象赋值函数的原型prototype的时候,函数的constructor的指向会发生错误,需要进行修正
    Narenizor.prototype = new Parenizor("laoli");

   //constructor为对象原型prototype的属性

  //此方法可以对constructor指向进行修正

    Narenizor.prototype.constructor = Narenizor;
    Narenizor.prototype.setName=function(name){
        this.name=name;
        return this.name;
    }

   var myNarenizor = new Narenizor("xiaowang");

   alert(myNarenizor.constructor == Narenizor);//true

   alert(Narenizor.constructor == Function);//true

 

 

prototype 属性

返回对象类型原型的引用。

objectName.prototype

objectName 参数是对象的名称。

向Array的原型中添加扩展方法后,当使用for-in循环数组时,这个扩展方法也会被循环出来。

 

 // 向JavaScript固有类型Array扩展一个获取最小值的方法
        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;
        };

下面的代码说明这一点(假设已经向Array的原型中扩展了min方法):
  var arr = [1, 56, 34, 12];
        var total = 0;
        for (var i in arr) {
            total += parseInt(arr[i], 10);
        }
        console.log(total);   // NaN

解决方法
  var arr = [1, 56, 34, 12];
        var total = 0;
        for (var i in arr) {
            if (arr.hasOwnProperty(i)) {
                total += parseInt(arr[i], 10);
            }
        }
        console.log(total);   // 103

hasOwnProperty 方法

返回一个布尔值,指出一个对象是否具有指定名称的属性。

object.hasOwnProperty(proName)

参数

object

必选项。一个对象的实例。

proName

必选项。一个属性名称的字符串值。

说明

如果 object 具有指定名称的属性,那么 hasOwnProperty 方法返回 true;反之则返回 false。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。

示例

在下例中,所有的 String 对象共享一个公用 split 方法。下面的代码将输出 falsetrue

var s = new String("JScript"); print(s.hasOwnProperty("split")); print(String.prototype.hasOwnProperty("split"));
 

你可能感兴趣的:(关于javascript对象的prototype与constructor)