枯燥的js对象与包装

基本形式

var 对象名字 = {
属性1:属性值,(逗号隔开)
属性2:属性值
}
属性值可以是一个函数。并且当对象里要引用该对象属性值时候,可以用this来代替对象名字,
eg:对象名字.属性1=this.属性1
在外面可以给对象加值,eg:对象名字.新属性 = 属性值;


当属性值是一个函数时,执行该属性,会返回undefined。


删除属性值用delete 对象名字.属性
obj.name---->obj[‘name’]是一样的,括号里面是字符串。obj[‘name’]更加灵活,可以obj[‘name’+num];

对象的创建方法

1.var obj ={ } plainObject 对象字面量/对象直接量
2.构造函数
1)系统自带的函数 object()
var obj = new Object( );与第一种没有任何区别。

2)自定义
eg:

function Car(){
    
    
            this.name = "BMW";
        }
        var car = new Car();
function Car(color){
    
    
			this.color = color;
            this.name = "BMW";
        }
        var car = new Car('red');

构造函数内部原理

1.在函数体最前面隐式的加上this = {},前提是加new
例如

function Car(){
    
    
//var this={} 会先加上一个this的空对象
            this.name = "BMW";
        }
        var car = new Car();
          //return this;

2.执行this.xxx=xxx;
给this里面的属性赋值。

3.隐式的返回this。
前面加new的话必须返回一个对象值。否则会被忽略。

包装

var num = new Number(123);
var str = new String(‘abcd’);
var bol = new Boolean(‘true’);
此时 num,str,bol都成为一个对象,可以拥有属性。

初始值(num str Boolean undefined object function等)没有属性,不转变为对象的话会内部转换为对象再删除,引用的时候会重新转换,两次的Number并不一样
eg

var str = "abcd";
str.length=2;
console.log(str.length);

结果是4。

var str = "abc";
        str+=1;
        var test = typeof(str);
        if(test.length==6){
    
    
            test.sign ="dfasdf";
        }
        console.log(test.sign);

结果是undefined。所以说两次隐式对象并不一样。

猜你喜欢

转载自blog.csdn.net/weixin_51664705/article/details/113761666