关于JS对象

函数:

    因为函数属于引用类型,有属性和方法。而且函数属于一种特殊的对象继承自obj,函数名其实就是一个指向函数对象的指针。

 所以当重复定义了两次函数之后,第二次定义的函数会将函数指针指向第二个被实例化的函数对象

    理解一下重载:

                    重载就是给函数设置不同的参数个数和类型,通过控制传参来调用不同的方法。

         但是js有形参和实参的机制,所以重载是不存在的,但是可以通过使用函数内部属性(arguments)来控制

 arguments代表的是实参合并成数组的形式    arguments[0]//表示传递的第一个元素    arguments[1]//表示传递的第二个元素

所以可以通过判断arguments的长度来控制函数内部执行不同的方法达到变相的重载效果。

arguments这个对象还有一个属性:callee,该属性是一个指针,指向拥有arguments对象的函数。不太理解这个。。下次看到补上

对象:

    关于对象内属性调用,可以打点调用obj.name;也可以用括号,用括号可以写变量obj[name]

js 的每一个实例都具有以下属性和方法:

constructor

保存着用于创建当前对象的函数,对于前面的例子,构造函数就是object()

hasOwnProperty(propertyName)

检查当前属性在当前对象实例中,而不是在原型中是否存在。参数以字符串的形式。就是检查当前属性是否是对象专属的,而不是通过原型继承过来的.

isPrototypeOf(object)

检查传入对象是否是传入对象的原型

propertyIsEnumerable(propertyName)

用来检查给定的属性是否是枚举类型。能被for...in遍历出来的属性;未经由Object.defineProperty定义为不可列举。但是可以通过Object.defineProperty(obj, 'toString', {value: ..., enumerable: false})去设置某属性为不可枚举的

toLocaleString()

返回对象的字符串表示

person.toString()

返回对象的字符串表示

valueOf()返回对象的字符串表示

Object.create()创建

该方法有两个参数,我就只解释下第一参数,第二个参数不常用(对对象的属性进行进一步描述)

第一个参数:传入要继承的原型(prototype)对象

怎样理解这句话呢?

var obj1 = Object.create({

  name: "ys",

  age: 12

});

console.log(obj1); //{}

console.log(obj1.age); //12

所以创建一个空对象:

varobj3 = Object.create(Object.prototype);

console.log(obj3); //{},(空对象,与前两个方法 {},new Object 相同)

console.log(obj3.__proto__); //如下图 ,只包含了基本对象的方法

如果是一个对象需要至空,那就直接obj=null;

你可能感兴趣的:(关于JS对象)