对象
- 对象的创建方法
-
var obj = {}对象字面量/对象直接量(plainObiect) -
构造函数
1)系统自带的构造函数 Object()
var obj = new Object();
- 自定义
构造函数和函数在结构上没有任何区别,构造函数在命名上严格符合大驼峰式命名规则。
//自定义构造函数
function Person() {
name = "Ming";
age = 0;
say = function() {
console.log("Hello!");
}
}
var person1 = new Person();
- 属性的增、删、改、查
增、改、查都直接写就可以,删要借助 delete
person.sex; //增
delete person.age; //删
person.age = 18; //改
person.age; //查
- 构造函数的内部原理
-
在函数体最前面隐式的加上var this = {}
-
执行this.xxx = xxx
-
隐式的返回this
包装类
var num = new Number(123);
var str = new String('abc');
var bol = new Boolean('true');
//undefined和null不能设置属性
数字有原始值数字和数字对象。原始值数字不能有属性和方法,对象可以。
var num = 4;
num.len = 3;
//原始值应该是不能有属性的,但运行却没有报错,访问 len 属性的结果是 undefined
//原始值不能有属性,如果非得增加属性,系统会隐式的 new Number(4).len = 3
//然后再把刚刚new的删掉
console.log(num.len);
//此时系统会再次new Number,这个刚刚new的是没有len属性的,就会返回undefined
下面有两道题
var str = "abcd";
str.length = 2;
//new String('abcd').length = 2; --> delete
console.log(str); //abcd
var str = "abc";
str += 1;
var test = typeof(of); //test = String
if(test.length == 6){ //true
test.sign = "typeof的返回结果可能为String";
//new String(test).sign = ... --> delete
}
console.log(test.sign); //undefined
原型
原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
Person.prototype.name = "Li"; //prototype是系统自带的一个属性
function Person() {
}
var person = new Person();
var person1 = new Person();
//person.name和person1.name的结果都为 li
- 对象如何查看对象的构造函数 --> constructor
constructor会返回构造这个对象的构造函数。
function Person() {
}
function Car() {
}
var car = new Car();
Car.prototype.constructor = Person; //constructor的值是可以更改的
//car寻找自己的构造函数就会返回Person
- ** proto **
function Person() {
//var this = {
// __proto__: Person.prototype;
//}
//当访问这个对象属性时,如果没有这个属性,就会通过proto指向的索引,
//去找Person.prototype里有没有这个属性。
}
原型链
- 构成原型链
Grand.prototype.lastName = "Li";
function Grand() {
}
var grand = new Grand();
Father.prototype = grand;
function Father() {
this.name = "xiaoming";
}
var father = new Father();
Son.prototype = father;
function Son() {
this.hobbit = "sing";
}
var son = new Son();
son.name
son.lastname //想访问这个属性,自身没有,会沿着prototype往上找
这样把原型连成链就是原型链,原型链的链接点就是proto
- Object.creat(原型)
Person.prototype.name = "sunny";
function Person() {
}
var person = Object.creat(Person.prototype)
所有对象的最终都会继承自Object.prototype --> 这句话是错误的
Object.creat()括号里可以放null,这时构造的对象就没有原型,没有proto属性。