coffeeScript 학습 02
5014 단어 coffeescrip
가방을 닫다
closure = do ->
_private = "foo"
-> _private
console.log(closure()) #=> "foo"
//`do` `Immediate Function`
(function() {
var closure;
closure = (function() {
var _private;
_private = "foo";
return function() {
return _private;
};
})();
console.log(closure());
}).call(this);
CoffeeScript
특수한 것을 사용합니다=>
문법은 이 번거로움을 줄였다element = document.getElementById('id')
@clickHandler = -> alert "clicked"
element.addEventListener "click", (e) => @clickHandler(e)
//
(function() {
var element;
element = document.getElementById('id');
this.clickHandler = function() {
return alert("clicked");
};
element.addEventListener("click", (function(_this) {
return function(e) {
return _this.clickHandler(e);
};
})(this));
}).call(this);
확장
String::expends = -> @replace /_/g, "-"
//
(function() {
String.prototype.expends = function() {
return this.replace(/_/g, "-");
};
}).call(this);
종류
class Person
_private = 'value' //private
@sex: true //Person.sex
@log: -> //Person.log
console.log 0
@create: (name, age)->
new Person(name,age)
constructor: (@name, @age) ->
log: -> //instance.log
console.log @name
tell: => //instance.tell
console.log @age
jinks = new Person('jinks', 23)
jack = Person.create('jack', 22)
<!--
h='name写在参数中即可';a='@';n='直接将';e=n+a+h;
document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
//-->
인자에 atname를 직접 쓰면 됩니다.
,
<!--
h='name';a='@';n='等价于在函数体中的';e=n+a+h;
document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
//-->
함수체에 있는atname와 같다
= name
계승
class Gadget
constructor: (@name) ->
sell: =>
"buy #{@name}"
class Iphone extends Gadget
constructor: -> super("iphone")
nosell: =>
"Don't #{@sell()}"
iphone = new Iphone
iphone.nosell()
혼합(Mixin)
루비 언어에서의 Mixin은 당신의 클래스가 여러 개의 모듈을 얻을 수 있는 방법으로 다중 계승에 좋은 실현이라고 할 수 있습니다
class Module
@extend: (obj) ->
for key, value of obj
@[key] = value
@include: (obj) ->
for key, value of obj
@::[key] = value
classProperties =
find: (id) ->
console.log ("find #{id}")
instanceProperties =
save: ->
console.log ("save")
class User extends Module
@extend classProperties
@include instanceProperties
user = User.find
user = new User
user.save()
<!--
h='extend来Mixin';a='@';n='使用';e=n+a+h;
document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
//-->
at extend를 사용하여 Mixin
, 구현은 간단한 복사 대상의 속성입니다
<!--
h='include来Mixin';a='@';n='使用';e=n+a+h;
document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
//-->
at include를 사용하여 Mixin
, 구현은 복사 대상의 원형 속성입니다