Skip to content

Commit b9fd086

Browse files
author
朱安邦
committed
Boolean类型
1 parent d6ca39e commit b9fd086

3 files changed

Lines changed: 107 additions & 25 deletions

File tree

test-file.html

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@
1414
</head>
1515
<body>
1616
<script>
17-
18-
var myJSONText = '{"bindings": [{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}]}';
19-
20-
console.log(typeof myJSONText);//string
21-
22-
var testJSONObject=eval("("+myJSONText+")");
23-
console.log(typeof testJSONObject);//Object
24-
console.log(testJSONObject.bindings);
25-
26-
17+
var falseObject = new Boolean(false);
18+
var result = falseObject && true;
19+
console.log(falseObject,result); //true,因为falseObject会被转为true;因为是当作对象来解析的;
20+
var falseValue = false;
21+
result = falseValue && true;
22+
console.log(falseValue,result); //false
23+
24+
console.log(typeof falseObject); //object
25+
console.log(typeof falseValue); //boolean
26+
console.log(falseObject instanceof Boolean); //true
27+
console.log(falseValue instanceof Boolean); //false
2728

2829

2930

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Boolean类型
2+
3+
可以先输出Boolean来观察下
4+
5+
console.dir(new Boolean())
6+
7+
![](http://i.imgur.com/ufcUHAP.png)
8+
9+
这个类型只有2个方法,并且都是重写Object的方法;
10+
11+
- toString()
12+
- valueOf()
13+
14+
15+
Boolean对象在实际使用中,用处并不大,
16+
17+
因为boolean数据就是用来判断真假的,而Boolean对象是做为对象来用的,任何非空对象转换的时候,都是true、;
18+
19+
new Boolean(false) //这种创建的Boolean是true的;
20+
21+
例子如下:
22+
23+
var falseObject = new Boolean(false);
24+
var result = falseObject && true;
25+
console.log(falseObject,result); //true,因为falseObject会被转为true;因为是当作对象来解析的;
26+
var falseValue = false;
27+
result = falseValue && true;
28+
console.log(falseValue,result); //false
29+
30+
console.log(typeof falseObject); //object
31+
console.log(typeof falseValue); //boolean
32+
console.log(falseObject instanceof Boolean); //true
33+
console.log(falseValue instanceof Boolean); //false
34+
35+
理解基本类型的布尔值与 Boolean 对象之间的区别非常重要——当然,我们的建议是永远不要使用 Boolean 对象。

面向对象和继承方式/创建对象的方式.md

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -737,33 +737,79 @@ p1 和 p2 拥有不同的属性值,但是拥有相同的方法;
737737

738738
创建自定义类型的最常见方式,就是组合使用构造函数模式与原型模式。构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方法的引用,最大限度地节省了内存。另外,这种混成模式还支持向构造函数传递参数;可谓是集两种模式之长。
739739

740-
function Person(name, age, job){
740+
function CreateJsPerson(name, age) {
741741
this.name = name;
742742
this.age = age;
743-
this.job = job;
744-
this.friends = ["Shelby", "Court"];
743+
this.like =["one","two"];
745744
}
746-
Person.prototype = {
747-
constructor : Person,
748-
sayName : function(){
749-
console.log(this.name);
745+
CreateJsPerson.prototype = {
746+
constructor:CreateJsPerson,
747+
writeJs:function(){
748+
console.log("my name is " + this.name + ",i can write js 啦!!");
750749
}
751750
};
752-
var person1 = new Person("zhu", 16, "WEB");
753-
var person2 = new Person("an", 26, "JAVA");
754-
person1.friends.push("Van");
755-
console.log(person1.friends); //"Shelby,Count,Van"
756-
console.log(person2.friends); //"Shelby,Count"
757-
console.log(person1.friends === person2.friends); //false
758-
console.log(person1.sayName === person2.sayName); //true
751+
var p1 = new CreateJsPerson("zhu1", 18);
752+
var p2 = new CreateJsPerson("zhu2", 28);
753+
p1.writeJs();//->my name is zhu1,i can write js 啦!!
754+
p2.writeJs();//->my name is zhu2,i can write js 啦!!
755+
p1.like.push("p1-like");
756+
console.log(p1.like);//["one", "two", "p1-like"]
757+
console.log(p2.like);//["one", "two"]
758+
console.log(p1.writeJs === p2.writeJs);//->true
759+
console.log(p1.like === p2.like);//->false
759760

760761

761-
在这个例子中,实例属性都是在构造函数中定义的,而由所有实例共享的属性 constructor 和方法 sayName() 则是在原型中定义的。而修改了 person1.friends (向其中添加一个新字符串),并不会影响到 person2.friends ,因为它们分别引用了不同的数组。
762+
在这个例子中,实例属性都是在构造函数中定义的,而由所有实例共享的属性 constructor 和方法 writeJs() 则是在原型中定义的。而修改了 p1.like (向其中添加一个新字符串),并不会影响到 p2.like ,因为它们分别引用了不同的数组。
762763

763764
**这种构造函数与原型混成的模式,是目前在 ECMAScript中使用最广泛、认同度最高的一种创建自定义类型的方法。可以说,这是用来定义引用类型的一种默认模式。**
764765

765766

767+
##### 1、构造函数模式中拥有了类和实例的概念,并且实例和实例之间是相互独立开的->实例识别
768+
769+
基于构造函数模式的原型模式解决了方法或者属性公有的问题->把实例之间相同的属性和方法提取成公有的属性和方法 ->想让谁公有就把它放在CreateJsPerson.prototype上即可
770+
771+
- 1、每一个函数数据类型(普通函数、类)都有一个天生自带的属性:prototype(原型),并且这个属性是一个对象数据类型的值
772+
- 2、并且在prototype上浏览器天生给它加了一个属性constructor(构造函数),属性值是当前函数(类)本身
773+
- 3、每一个对象数据类型(普通的对象、实例、prototype...)也天生自带一个属性:__proto__,属性值是当前实例所属类的原型(prototype)
774+
775+
function Fn() {
776+
this.x = 100;
777+
this.sum = function () {
778+
};
779+
}
780+
Fn.prototype.getX = function () {
781+
console.log(this.x);
782+
};
783+
Fn.prototype.sum = function () {
784+
};
785+
var f1 = new Fn;
786+
var f2 = new Fn;
787+
console.log(Fn.prototype.constructor === Fn);//->true
788+
789+
##### 2、Object是JS中所有对象数据类型的基类(最顶层的类)
790+
791+
  //1)、f1 instanceof Object ->true 因为f1通过__proto__可以向上级查找,不管有多少级,最后总能找到Object
792+
793+
  //2)、在Object.prototype上没有__proto__这个属性
794+
795+
function Fn() {
796+
this.x = 100;
797+
this.sum = function () {
798+
};
799+
}
800+
Fn.prototype.getX = function () {
801+
console.log(this.x);
802+
};
803+
Fn.prototype.sum = function () {
804+
};
805+
var f1 = new Fn;
806+
var f2 = new Fn;
807+
// console.log(Fn.prototype.constructor === Fn);//->true
808+
console.log(f1 instanceof Object);//->true
809+
console.dir(f1);//->原型,原型链的查找;
810+
766811

812+
##### 3、原型链模式
767813

768814
# 知识点六:其它扩展模式
769815

0 commit comments

Comments
 (0)