标签:javascrip 特性 ring 小明 操作符 ret 如何获取 json格式 重复
var obj=new Object();//关键词Object,大写首字母 obj.name="小明"; obj.age=20; obj.sex="男"; obj.play=function(){ console.log("我在玩游戏"); }; obj.showName=function(){ console.log("我叫"+this.name) } console.log(obj.name);//小明 console.log(obj.age);//20 console.log(obj.sex);//男 obj.play();//我在玩游戏 obj.showName();//我叫小明
function creatObj(){ var obj= new Object; obj.name="关羽"; obj.age=30; obj.showName=function(){ console.log("我叫"+this.name); }; obj.showAge=function(){ console.log("我今年"+this.age); }; return obj; } var obj1=creatObj(); var obj2=creatObj(); obj1.showName();//我叫关羽 obj1.showAge();//我今年30 obj2.showName();//我叫关羽 obj2.showAge();//我今年30
这种方法虽然也实现了创建对象,但是同样地,如果需要多次创建对象,而且属性内容不一样的话,也是需要重复代码多遍。需要重新考虑代码重用率,接下来修改代码,使其可以提高代码重复率,而且可以改变工厂方法,传入参数赋值。
function creatObj(name,age){ var obj= new Object; obj.name=name; obj.age=age; obj.showName=function(){ console.log("我叫"+this.name); }; obj.showAge=function(){ console.log("我今年"+this.age); }; return obj; } var obj1= new creatObj("刘备",32); var obj2= new creatObj("关羽",30); obj1.showName();//我叫刘备 obj1.showAge();//我今年32 obj2.showName();//我叫关羽 obj2.showAge();//我今年30
这种方法虽然可以提高代码的重用率,但和面向对象中类的概念相比,有一个很大的缺陷。
面向对象强调对象的属性私有,但对象的方法是共享。而上面的工厂方法在创建对象时,要为每个对象创建各自私有的方法。
同时,由于为每个对象都创建逻辑相同的方法,所以很浪费内存。
function creatObj(name,age){ var obj= new Object; obj.name=name; obj.age=age; obj.showName=showName; obj.showAge=showAge; return obj; } showName=function(){ console.log("我叫"+this.name); }; showAge=function(){ console.log("我今年"+this.age); }; var obj1=new creatObj("刘备",32); var obj2=new creatObj("关羽",30); obj1.showName();//我叫刘备 obj1.showAge();//我今年32 obj2.showName();//我叫关羽 obj2.showAge();//我今年30
上面通过定义几个函数对象,解决了不同对象持有函数对象的私有问题。现在所有对象的方法都持有上面两个函数的引用。
但是这么一来,对象的函数和对象又相互独立,这和面向对象中特定方法属于特定类的思想不符合。
function Person(name,age){ this.name=name; this.age=age; this.showName=function(){ console.log("我叫"+this.name); }; this.showAge=function(){ console.log("我今年"+this.age); }; }; var obj1=new Person("刘备","32"); var obj2=new Person("关羽","30"); obj1.showName();//我叫刘备 obj1.showAge();//我今年32 obj2.showName();//我叫关羽 obj2.showAge();//我今年30
var obj={ name:"刘备", age:32, height:"180cm" } console.log(obj.name);//刘备 console.log(obj.age);//32 console.log(obj.height);//180cm console.log(obj instanceof Object);//true
1.如何获取该变量(对象)是不是属于什么类型?
var obj={ name:"张飞", age:32, }; console.log(obj instanceof Object);//true
2.对象是一组有序属性的集合,属性的值可以是任意的类型
3.点语法:没有什么就点什么,可以设置和获取和获取对象属性
var obj={ name:"刘备", age:32, }; obj.height="180cm";//添加height属性 console.log(obj.name);//刘备 console.log(obj.age);//32 console.log(obj.height);//180cm
4.设置和获取属性的另外一种方法是通过[ " " ],必须有双引号
var obj={ name:"关羽", age:"30", }; obj["height"]="190cm";//添加height属性 console.log(obj["name"]);//关羽 console.log(obj["age"]);//30 console.log(obj["height"]);//190cm
5.Json
var obj={ "name":"刘备", "age":"32", "height":"180cm" }
6.数据类型
//例1: var obj={ name:"李白" }; function f2(obj2){ obj2.name="韩信"; } console.log(obj.name);//李白 f2(obj); //obj2.name="韩信"----换成obj.name="韩信" console.log(obj.name);//韩信
var num=50; function f1(num){ num=60; console.log(num);//60 } f1(num); //num=60-----原来的num=60没了 换成了num=50而且是隐式全局变量 console.log(num);//50
//例3: var num1=55; var num2=66; function f1(num,num1){ num=100; num1=100; num2=100; console.log(num);//100 console.log(num1);//100 console.log(num2);//100 } f1(num1,num2); // num=100;---原来的num没了 换成了num1=55,隐式全局变量 // num1=100;---原来的num1没了 换成了num2=66,隐式全局变量 // num2=100;---这里对num2重新赋值,变成了num2=100,隐式全局变量 console.log(num1);//55 console.log(num2);//100 console.log(num);//报错
//例4: function Person(name,age,salary){ this.name=name; this.age=age; this.salary=salary; } function f1(person){ person.name="张三"; person=new Person("李四",18,10); } var p=new Person("赵六",18,1000); console.log(p.name);//赵六 f1(p); //person.name="张三"-----换成了p.name="张三"(代替原来的"赵六") //下面换成了p=new Person("李四",18,10)等于新创建了一个对象 console.log(p.name);//张三
标签:javascrip 特性 ring 小明 操作符 ret 如何获取 json格式 重复
原文地址:https://www.cnblogs.com/EricZLin/p/8945287.html