javascript创建对象的方法和遇到问题的解决方法
来源:互联网 发布:mac如何结束台程序 编辑:程序博客网 时间:2024/05/10 04:29
在之前学习到的js中创建对象的方法就是通过new Object来创建一个新的对象,然后在下面写上相对应的属性和属性值,其次就是利用json也可以创建一个新的对象,直接声明一个变量,然后在花括号里面写上json的键值对,这样也可以得到我们想要的一个对象。例如:
//这是用new直接创建一个新的人的对象
var person=new Object();
person.name="小明";
person.age=18;
person.say=function(){
alert("我很傻,但是我很天真");
}
person.say();
//使用json创建一个新的人的对象
var person={
name:"小石头",
age:18,
say:function(){
alert(this.name+this.age);
}
}
person.say();
但是因为没有类的约束,所以这两种情况都无法实现对象的重复使用,所以如果定义很多的对象的话就要一个一个的去写,这样太过于麻烦,在实际的操作过程中也存在一定的问题,这个时候就可以使用工厂的模式去创建很多的对象。例如:
function Person(name,age){
var p=new Object();
p.name=name;
p.age=age;
p.say=function(){
alert(this.name+this.age);
}
return p;
}
var p1=Person("小明",18);
var p2=Person("小王",16);
虽然上述方法确实解决了对象无法重复创建的问题,但是现在又存在了另一个问题就是无法判断得到的对象的类型,可以用typeof和instanceof来进行判断,只得到的是一个Object,所以这个时候就推出了基于构造函数的方式。例如:
function Person(name,age){
this.name=name;
this.age=age;
this.say=function(){
alert(this.name+this.age);
}
}
var p1=new Person("小明",18);
var p2=new Person("小王",16);
p1.say();
alert(p1 instanceof Person);
这个时候我们就写出了一个基于构造函数的方式来大批量的创造出想要的对象,这个和工厂模式生产对象的方法有点相似,但是这个有个潜规则就是函数名的首字母必须大写,这就代表的是构造函数的方法。而且我们现在也可以看到通过上面的判断可以得出的是一个布尔值true,这样也解决了无法判断所得到的对象的类型的问题。但是现在又有一个问题出现了就是每创建一个对象的时候就会相对应的得到一个say方法。只有在调用的时候才会在堆中创建,这样也大大的加大了内存的占有率。所以这个时候我们可以把say方法当成一个全局的函数放在外面来使用,但是这样的话如果在全局中创建很多的方法,window对象也可以直接调用这些方法,这样就打破了对象的封装性。所以接下来就引入了封装,也就是javascript的原型。
- javascript创建对象的方法和遇到问题的解决方法
- 遇到的问题和解决方法
- JavaScript 创建对象的方法
- Javascript创建对象的方法
- JavaScript创建对象的方法
- 面向对象的Javascript,创建静态方法和实例方法
- Java反射机制创建带参对象遇到的问题与解决方法
- javascript push一个对象遇到的问题。
- JavaScript新创建对象的一些属性和方法
- JavaScript--创建对象和生成原型链的方法
- CppUnit 遇到的问题和解决方法
- 调试LED遇到的问题和解决方法
- 开发中遇到的问题和解决方法
- IOS开发遇到的问题和解决方法
- APPframework安装遇到的问题和解决方法
- 【项目练习】遇到的问题和解决方法
- Appium遇到的问题和解决方法
- Ionic开发遇到的问题和解决方法
- mysql压缩包安装及UTF-8字符集配置和修改管理员密码过程
- 关于JavaScript与java之间进行传值出现的乱码问题
- 算法-快速排序
- Android倒计时案例
- java中的数据存储,字节转换,位操作
- javascript创建对象的方法和遇到问题的解决方法
- java.io.IOException: Zip archive '*****.apk' doesn't contain classes.dex
- 处理格式化输入函数scanf遇空格停止问题
- javac常用参数
- JDK\JVM\JRE
- Android图片上传(头像裁切+原图原样)
- [LeetCode]Edit Distance
- 在脚本中使用gdb
- tab栏切换效果:改进代码原理:闭包 (共3步骤)