JS中对象的创建⽅法以及对象默认的字符串返回值
[Objectobject]
对象可以使⼀些⽆关的变量建⽴某种联系,使这些变量成为⼀个整体也就是对象,这些变量也就成为这个对象的属性
对象具有属性和⽅法
var obj = {};这是⼀个对象,但这个对象没有属性,⽅法
如果取属性值则为:对象名.属性名
如果调⽤⽅法则为:对象名.⽅法名()
如果⼀个对象没有某个属性或⽅法,那么取值时会得到undefined,不会报错
字⾯式创建对象:
var obj = {};
console.log(obj.name);//undefined
//可以直接在定义对象时添加属性和⽅法
var obj = {
name:"孙悟空",
age:18,
sayHello:function(){
console.log(this.name);
}
}
console.log(obj.name); //孙悟空
添加属性时,如果对象⾥已有这个属性,则会覆盖,删除属性为:delete 对象名.属性名;(delete obj.name;)
任意对象在布尔转换时都为true
构造函数:
⼀个普通函数,当它和new运算符⼀起使⽤时,该函数成为构造函数,通常会将构造函数的⾸字母⼤写,构造函数⼀般是专门⽤来创建对象的函数。
var obj = new Object(); //Object为构造函数
console.log(obj);  //Object{}
obj.name = "孙悟空";
obj.age = 18;
console.log(obj); //Object{name:"孙悟空",age:18}
可以使⽤⼯⼚⽅法创建对象,该⽅法可⼤批量创建对象,也就是在⼀个函数中创建⼀个对象,然后创建不同的对象可以通过调⽤该函数传⼊不同参数来实例化不同对象。
function creatObj(name, age, gender){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayHello = function(){
console.log(this.name);
}
return obj;
}
var obj1 = creatObj("孙悟空",18,"男");
var obj2 = creatObj("沙和尚",30,"男");
var obj3 = creatObj("蜘蛛精",16,"⼥");
console.log(obj1);    //}
console.log(obj2);    //}
console.log(obj3);    //}
console.log(typeof(obj1));  //object
console.log(typeof(obj2));  //object
console.log(typeof(obj3));  //object
使⽤⼯⼚⽅法创建对象时使⽤的构造函数都是Object,所以创建的对象都是Object这个类型,这会导致我们⽆法区分出多种不同类型的对象。所以我们还可以通过构造函数来创建对象
function Person(name, age){
this.name = name;
this.age = age;
this.sayHello = function(){
console.log(this.name);
}
}
function Dog(name, age){
this.name = name;
this.age = age;
this.sayHello = function(){
console.log(this.name);
}
}
var obj1 = new Person("猪⼋戒",28);
console.log(obj1);  //person{name:...}
console.log(typeof(obj1));
console.log(obj1 instanceof Person); //true
console.log(obj1 instanceof Dog); //false
var obj2 = new Dog("旺财",3);
console.log(obj2);    //dog{name:...}
console.log(typeof(obj2));
console.log(obj2 instanceof Dog); //true
使⽤同⼀个构造函数创建的对象,我们称为⼀类对象(所以可以将⼀个构造函数成为⼀个类)
,我们通过⼀个构造函数创建的对象,称为是该类的实例,使⽤instanceof可以检查⼀个对象是否是⼀个类的实例。
instanceof语法:对象 instanceof 构造函数,如果是实例,返回true,否则返回false
write的返回值
构造函数的执⾏流程:
1. ⽴刻创建⼀个新的对象
2. 将新建的对象设置为函数中的this,在构造函数中可以使⽤this来引⽤新建的对象
3. 逐⾏执⾏函数中的代码
4. 将新建的对象作为返回值返回
任意对象的返回值:
var obj = {};
document.write(obj);  //[object Object]
这是因为任意对象默认的字符串表⽰形式默认调⽤toString()⽅法,toString()⽅法在原型的原型中,想要改变这种显⽰⽅式,只需要重写toString()⽅法。
var obj = {};
return "默认⽅法改变";
}
document.write(obj);  //默认⽅法改变
但如果想要从根本上改变这种⽅式,应该在原型的原型中改变这个⽅法
function Person(name, age){
this.name = name;
this.age = age;
}
var obj1 = new Person("猪⼋戒",28);
var obj2 = new Person("唐僧",20);
/*--如果仅仅更改obj1的toString()⽅法,则对于obj2还是输出[Object object]*/
/
*String = function(){
return "我的名字:"+this.name+",我的年龄:"+this.age;
}
document.write(obj1); //我的名字:猪⼋戒,我的年龄:28
document.write(obj2);  //[Object object]  */
/*所以要在原型中更改toString()⽅法*/
String = function(){
return "我的名字:"+this.name+",我的年龄:"+this.age;
}
document.write(obj1); //我的名字:猪⼋戒,我的年龄:28
document.write(obj2);  //我的名字:唐僧,我的年龄:20
console.log(obj1);  //Person{name:"猪⼋戒"...}
console.log(obj1.__proto__.__proto__.hasOwnProperty("toString"));//true  hasOwnProperty()⽅法只有当对象⾃⾝中含有属性时,才会返回true

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。